Octogones, pavage et rosacesRenée De Graeve2019 |
Contents
- 1 Les octogones
- 2 Le pavage avec un octogone régulier et un carré
- 3 Les octogones en couleur
- 4 Le pavage en couleur
- 5 Les rosaces en couleur
1 Les octogones
On veut tracer la figure suivante :
Elle est composée d’un octogone et d’un carré
central. Les côtés du carré sont parallèles aux côtés de l’octogone
et ont la même longueur que ceux de l’octogone. Puis, on trace
les médianes de l’octogone qui sont aussi les médianes du carré et les
segments reliant les sommets du carré aux côtés de l’octogone en leur
étant perpendiculaires.
1.1 Exercice1
Quelle est la longueur du côté d’un octogone régulier inscrit dans un
cercle de rayon ?
Comment peut-on construire le carré à partir de l’octogone régulier ?
Si on prend comme axes et des droites parallèles aux diagonales du
carré centré en , quelles sont les coordonnées des sommets du
carré ?
Réponse1
La longueur du côté d’un octogone régulier inscrit dans un cercle
de rayon est égale à .
À partir de l’octogone régulier , on construit les sommets
(resp ) du carré comme les intersections des segments et
(resp et , et , et ).
On note le milieu de et le milieu de .
On remarquera que les triangles et sont des triangles
rectangles isocèles égaux
Les affixes des sommets du carré sont :
1.2 Exercice2
On veut pouvoir emboiter les octogones, c’est pourquoi les
côtés du carré doivent avoir la même longueur que ceux de l’octogone.
Montrer que
et en déduire que ).
En déduire, la formule et
le calcul des valeurs de et .
Réponse2
L’angle et donc .
On a montré précédemment que et
donc :
Donc .
On a donc :
donc :
On obtient :
Puisque et , on en déduit :
On a donc :
1.3 Le programme
Le programme octogone trace l’octogone la figure désirée.
octogone a pour coordonnées l’affixe z du centre de l’octogone,
l’angle que fait une diagonale du carré avec
et le rayon du cercle circonscrit à l’octogone.
On utilise comme variable locale a qui représente la longueur de
i.e la moitié de la longueur
de la diagonale du carré.
En syntaxe Xcas :
octogone(z,t,r):={ local L,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,isopolygone(z,z+r*exp(i*pi/8+i*t),-8); L:=L,carre(z+a*exp(i*t),z+a*i*exp(i*t)); L:=L,segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8))$(k=0..3); // $ genere une sequence L:=L,segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)); L:=L,segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)); return L; }:;
onload
En syntaxe Python
def octogone(z,t,r): # local L,a,k L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) L.append(isopolygone(z,z+r*exp(i*pi/8+i*t),-8)) L.append(carre(z+a*exp(i*t),z+a*i*exp(i*t))) L.append([segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8)) for k in range(4)]) L.append(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t))) L.append(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t))) return L
1.4 La ronde de 4 octogones autour d’un octogone central
On veut tracer 4 octogones autour d’un octogone central.
En syntaxe Xcas :
octogone5(z,t,r):={ local L,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,octogone(z,t,r); pour k de 1 jusque 7 pas 2 faire L:=L,octogone(z+r*sqrt(2)*cos(pi/8)*exp(i*t+i*k*pi/4),t,r); fpour; return L; }:;
onload
En syntaxe Python :
def octogone5(z,t,r): # local L,a,k L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) L.append(octogone(z,t,r)) k=1 while k<=7 : L.append(octogone(z+r*sqrt(2)*cos(pi/8)*exp(i*t+i*k*pi/4),t,r)) k=k+2 return(L)
1.5 La ronde de 8 octogones autour d’un octogone central
On veut tracer 8 octogones autour d’un octogone central.
En syntaxe Xcas :
octogone9(z,t,r):={ local L,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,octogone(z,t,r); pour k de 0 jusque 3 faire L:=L,octogone(z+(r*2*cos(pi/8)-a)*exp(i*t+i*k*pi/2+i*pi/4),t,r); L:=L,octogone(z+2*r*cos(pi/8)*exp(i*t+i*k*pi/2),t,r); fpour; return L; }:;
onload
En syntaxe Python :
def octogone9(z,t,r): # local L,a,k L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) L.append(octogone(z,t,r)) for k in range(4): L.append(octogone(z+(r*2*cos(pi/8)-a)*exp(i*t+i*k*pi/2+i*pi/4),t,r)) L.append(octogone(z+2*r*cos(pi/8)*exp(i*t+i*k*pi/2),t,r)) return(L)
On peut continuer le pavage, mais il y beaucoup de recouvrements et on dessine
plusieurs fois la même chose :
2 Le pavage avec un octogone régulier et un carré
Pour éviter des recouvrements on va écrire une procédure qui recouvre un
rectangle ayant lignes contenant chacune octogones faisant un angle
nul avec l’axe des et qui juxtapose les octogones précédents,
puis on comblera les vides avec une autre procédure qui dessinera les
médianes des carrés manquants.
Ces procédures auront les mêmes paramètres qui sont :
- l’affixe du centre de l’octogne situé en et ,
- la mesure de l’angle que font la ligne des centres avec l’axe des
- la longueur d’un côté de l’octogone qui es aussi la longueur d’un côté du carré,
- le nombre d’octognes sur une ligne et le nombre d’octognes sur une colonne.
2.1 Juxtaposition des octogones
La fonction octogonejux dessine les octogones juxtaposés.
En syntaxe Xcas
octogonejux(z,t,r,p,q):={ local L,j,k; L:=NULL; r:=evalf(r); pour j de 0 jusque q-1 faire pour k de 0 jusque p-1 faire L:=L,octogone(z+2*r*cos(pi/8)*(k+i*j)*exp(i*t),t,r); fpour; fpour; return L; }:;
onload
En syntaxe Python :
def octogonejux(z,t,r,p,q): # local L,j,k r=float(r) L=seq[] for j in range(q): for k in range(p): L=L,octogone(z+2*r*cos(pi/8)*(k+i*j)*exp(i*t),t,r) return(L)
2.2 Les médianes des carrés manquants
La fonction medianes dessine les médianes des carrés manquants. On utilise comme variables locales :
- b la moitié de la longueur d’un côté du carré,
- A le centre du carré,
- k l’indice de la ligne,
- j l’indice de la colonne.
medianes(z,t,r,p,q):={ local L,j,k,b,A; L:=NULL; r:=evalf(r); b:=r*sin(pi/8); pour j de 0 jusque q-2 faire pour k de 0 jusque p-2 faire A:=point(z+(r*cos(pi/8)+b)*exp(i*pi/4+i*t)+2*r*cos(pi/8)*(k+i*j)*exp(i*t)); L:=L,segment(A+b*exp(i*pi/4+i*t),A-b*exp(i*pi/4+i*t)); L:=L,segment(A+b*exp(3*i*pi/4+i*t),A-b*exp(3*i*pi/4+i*t)); fpour; fpour; return L; }:;
onload
En syntaxe Python :
def medianes(z,t,r,p,q): # local L,j,k,b,A L=[] r=float(r) b=r*sin(pi/8) for j in range(q-1): for k in range(p-1): A=point(z+(r*cos(pi/8)+b)*exp(i*pi/4+i*t)+2*r*cos(pi/8)*(k+i*j)*exp(i*t)) L.append(segment(A+b*exp(i*pi/4+i*t),A-b*exp(i*pi/4+i*t))) L.append(segment(A+b*exp(3*i*pi/4+i*t),A-b*exp(3*i*pi/4+i*t))) return(L)
2.3 Le pavage
La fonction octogonepave réunit les 2 procédures précédentes et
dessine le pavage du rectangle ayant lignes contenant chacune
octogones.
En syntaxe Xcas :
octogonepave(z,t,r,p,q):={ local L; L:=NULL; L:=L,octogonejux(z,t,r,p,q); L:=L,medianes(z,t,r,p,q); return L; }:;
onload
En syntaxe Python :
def octogonepave(z,t,r,p,q): return octogonejux(z,t,r,p,q),medianes(z,t,r,p,q)
3 Les octogones en couleur
3.1 Les octogones avec 2 couleurs
Dans un premier temps, on remplit l’octogne d’une couleur, puis on remplit le carré d’une autre couleur, enfin on trace les segments et les contours en noir et en épaisseur 3.
En syntaxe Xcas :
octogonep(z,t,r,c1,c2):={ local L,a; L:=[]; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,affichage(isopolygone(z,z+r*exp(i*pi/8)*exp(i*t),-8),c1+rempli); L:=L,affichage(isopolygone(z,z+r*exp(i*pi/8)*exp(i*t),-8),epaisseur_ligne_3); L:=L,affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),c2+rempli); L:=L,affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8))$(k=0..3),epaisseur_ligne_3); // $ L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),0+epaisseur_ligne_3); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3); return L; }:;
onload
La traduction en syntaxe Python :
def octogonep(z,t,r,c1,c2): # local L,a L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) L.append(affichage(isopolygone(z,z+r*exp(i*pi/8)*exp(i*t),-8),c1+rempli)) L.append(affichage(isopolygone(z,z+r*exp(i*pi/8)*exp(i*t),-8),epaisseur_ligne_3)) L.append(affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),c2+rempli)) L.append(affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),epaisseur_ligne_3)) L.append(affichage([segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8)) for k in range(4)],epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),0+epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3)) return(L)
3.2 Les octogones avec plusieurs couleurs
On décide d’utiliser 3 couleurs.
octogonep3c(z,t,r,c1,c2,c3):={ local L,k,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); pour k de 0 jusque 3 faire L:=L,affichage(polygone(z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi/2),z+r*exp(3*i*pi/8+i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*pi/2+i*t+i*k*pi/2),z+a*exp(i*t+i*pi/2+i*k*pi/2)),c2+irem(k,2)+rempli); L:=L,affichage(polygone(z+a*exp(i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*t+i*k*pi/2),z+r*exp(i*pi/8+i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi/2),z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi/2)),c1+irem(k,2)+rempli); fpour; L:=L,affichage(isopolygone(z,z+r*exp(i*pi/8+i*t),-8),epaisseur_ligne_3); L:=L,affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),c3+rempli); L:=L,affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8))$(k=0..3),epaisseur_ligne_3); // $ L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3); return L; }:;
onload
En syntaxe Python :
def octogonep3c(z,t,r,c1,c2,c3): # local L,k,a L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) for k in range(4): L.append(affichage(polygone(z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi/2),z+r*exp(3*i*pi/8+i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*pi/2+i*t+i*k*pi/2),z+a*exp(i*t+i*pi/2+i*k*pi/2)),c2+k % 2+rempli)) L.append(affichage(polygone(z+a*exp(i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*t+i*k*pi/2),z+r*exp(i*pi/8+i*t+i*k*pi/2),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi/2),z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi/2)),c1+k % 2+rempli)) L.append(affichage(isopolygone(z,z+r*exp(i*pi/8+i*t),-8),epaisseur_ligne_3)) L.append(affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),c3+rempli)) L.append(affichage(carre(z+a*exp(i*t),z+a*i*exp(i*t)),epaisseur_ligne_3)) L.append(affichage([segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8)) for k in range(4)],epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3)) return(L)
On décide d’utiliser 5 couleurs. En syntaxe Xcas :
octogonep5c(z,t,r,c1,c2,c3,c4,c5):={ local L,k,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); pour k de 0 jusque 1 faire L:=L,affichage(polygone(z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi),z+r*exp(3*i*pi/8+i*t+i*k*pi),z+r*cos(pi/8)*exp(i*pi/2+i*t+i*k*pi),z+a*exp(i*t+i*pi/2+i*k*pi)),c2+rempli); L:=L,affichage(polygone(z+r*sin(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi),z+r*exp(3*i*pi/8+i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*pi/2+i*t+i*pi/2+i*k*pi),z+a*exp(i*t+i*pi/2+i*pi/2+i*k*pi)),c4+rempli); L:=L,affichage(polygone(z+a*exp(i*t+i*k*pi),z+r*cos(pi/8)*exp(i*t+i*k*pi),z+r*exp(i*pi/8+i*t+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi),z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi)),c1+rempli); L:=L,affichage(polygone(z+a*exp(i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*t+i*pi/2+i*k*pi),z+r*exp(i*pi/8+i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi),z+r*sin(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi)),c3+rempli); fpour; L:=L,affichage(isopolygone(z,z+r*exp(i*pi/8+i*t),-8),epaisseur_ligne_3); L:=L,affichage(carre(z+a*exp(i*t),z+r*sqrt(2)*sin(pi/8)*i*exp(i*t)),c5+rempli); L:=L,affichage(carre(z+a*exp(i*t),z+r*sqrt(2)*sin(pi/8)*i*exp(i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8))$(k=0..3),epaisseur_ligne_3); // $ L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3); return L; }:;
onload
En syntaxe Python :
def octogonep5c(z,t,r,c1,c2,c3,c4,c5): # local L,k,a L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) for k in range(2): L.append(affichage(polygone(z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi),z+r*exp(3*i*pi/8+i*t+i*k*pi),z+r*cos(pi/8)*exp(i*pi/2+i*t+i*k*pi),z+a*exp(i*t+i*pi/2+i*k*pi)),c2+rempli)) L.append(affichage(polygone(z+r*sin(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi),z+r*exp(3*i*pi/8+i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*pi/2+i*t+i*pi/2+i*k*pi),z+a*exp(i*t+i*pi/2+i*pi/2+i*k*pi)),c4+rempli)) L.append(affichage(polygone(z+a*exp(i*t+i*k*pi),z+r*cos(pi/8)*exp(i*t+i*k*pi),z+r*exp(i*pi/8+i*t+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*k*pi),z+r*sin(pi/8)*exp(i*pi/4+i*t+i*k*pi)),c1+rempli)) L.append(affichage(polygone(z+a*exp(i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*t+i*pi/2+i*k*pi),z+r*exp(i*pi/8+i*t+i*pi/2+i*k*pi),z+r*cos(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi),z+r*sin(pi/8)*exp(i*pi/4+i*t+i*pi/2+i*k*pi)),c3+rempli)) L.append(affichage(isopolygone(z,z+r*exp(i*pi/8+i*t),-8),epaisseur_ligne_3)) L.append(affichage(carre(z+a*exp(i*t),z+r*sqrt(2)*sin(pi/8)*i*exp(i*t)),c5+rempli)) L.append(affichage(carre(z+a*exp(i*t),z+r*sqrt(2)*sin(pi/8)*i*exp(i*t)),epaisseur_ligne_3)) L.append(affichage([segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8)) for k in range(4)],epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3)) return(L)
3.3 Les 9 octogone colorés
On tape:
octogone9p3c(z,t,r,c1,c2,c3):={ local L,k,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,octogonep3c(z,t,r,c1,c2,c3); pour k de 0 jusque 3 faire L:=L,octogonep3c(z+(2*r*cos(pi/8)-a)*exp(k*i*pi/2+i*pi/4),t,r,c1,c2,c3); L:=L,octogonep3c(z+2*r*cos(pi/8)*exp(i*k*pi/2),t,r,c1,c2,c3);; fpour; return L; }:; octogone9p5c(z,t,r,c1,c2,c3,c4,c5):={ local L,k,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,octogonep5c(z,t,r,c1,c2,c3,c4,c5); pour k de 0 jusque 3 faire L:=L,octogonep5c(z+(2*r*cos(pi/8)-a)*exp(k*i*pi/2+i*pi/4),t,r,c1,c2,c3,c4,c5); L:=L,octogonep5c(z+2*r*cos(pi/8)*exp(i*k*pi/2),t,r,c1,c2,c3,c4,c5);; fpour; return L; }:;
onload
def octogone9p3c(z,t,r,c1,c2,c3): # local L,k,a L=seq[] r=float(r) a=r*sqrt(2)*sin(pi/8) L=L,octogonep3c(z,t,r,c1,c2,c3) for k in range(4): L=L,octogonep3c(z+(2*r*cos(pi/8)-a)*exp(k*i*pi/2+i*pi/4),t,r,c1,c2,c3) L=L,octogonep3c(z+2*r*cos(pi/8)*exp(i*k*pi/2),t,r,c1,c2,c3) return(L) def octogone9p5c(z,t,r,c1,c2,c3,c4,c5): # local L,k,a r=float(r) L=seq[] a=r*sqrt(2)*sin(pi/8) L=L,octogonep5c(z,t,r,c1,c2,c3,c4,c5) for k in range(4): L=L,octogonep5c(z+(2*r*cos(pi/8)-a)*exp(k*i*pi/2+i*pi/4),t,r,c1,c2,c3,c4,c5) L=L,octogonep5c(z+2*r*cos(pi/8)*exp(i*k*pi/2),t,r,c1,c2,c3,c4,c5) return(L)
3.4 La ronde des 37=4*9+1 octogones
4 Le pavage en couleur
On modifie la procédure octogonejux :
octogonep5cjux(z,t,r,p,q,c1,c2,c3,c4,c5):={ local L,j,k; L:=NULL; r:=evalf(r); pour j de 0 jusque q-1 faire pour k de 0 jusque p-1 faire L:=L,octogonep5c(z+2*r*cos(pi/8)*(k+i*j)*exp(i*t),t,r,c1,c2,c3,c4,c5); fpour; fpour; return L; }:;
onload
def octogonep5cjux(z,t,r,p,q,c1,c2,c3,c4,c5): # local L,j,k L=[] r=float(r) for j in range(q): for k in range(p): L.append(octogonep5c(z+2*r*cos(pi/8)*(k+i*j)*exp(i*t),t,r,c1,c2,c3,c4,c5)) return(L)
On modifie la procédure medianes pour remplir le
carré de la couleur c3 et pour tracer les médianes du carré en
épaisseur 3 :
medianespc(z,t,r,p,q,c5):={ local L,j,k,b,A; L:=NULL; r:=evalf(r); b:=r*sin(pi/8); pour j de 0 jusque q-2 faire pour k de 0 jusque p-2 faire A:=point(z+(r*cos(pi/8)+b)*exp(i*pi/4+i*t)+2*r*cos(pi/8)*(k+i*j)*exp(i*t)); L:=L,affichage(carre(A+b*sqrt(2)*exp(i*t),A+i*b*sqrt(2)*exp(i*t)),c5+rempli); L:=L,affichage(segment(A+b*exp(i*pi/4+i*t),A-b*exp(i*pi/4+i*t)),epaisseur_ligne_3); L:=L,affichage(segment(A+b*exp(3*i*pi/4+i*t),A-b*exp(3*i*pi/4+i*t)),epaisseur_ligne_3); fpour; fpour; return L; }:;
onload
def medianespc(z,t,r,p,q,c5): # local L,j,k,b,A L=[] r=float(r) b=r*sin(pi/8) for j in range(q-1): for k in range(p-1): A=point(z+(r*cos(pi/8)+b)*exp(i*pi/4+i*t)+2*r*cos(pi/8)*(k+i*j)*exp(i*t)) L.append(affichage(carre(A+b*sqrt(2)*exp(i*t),A+i*b*sqrt(2)*exp(i*t)),c5+rempli)) L.append(affichage(segment(A+b*exp(i*pi/4+i*t),A-b*exp(i*pi/4+i*t)),epaisseur_ligne_3)) L.append(affichage(segment(A+b*exp(3*i*pi/4+i*t),A-b*exp(3*i*pi/4+i*t)),epaisseur_ligne_3)) return(L)
On modifie la procédure octogonepave :
octogonepave5c(z,t,r,p,q,c1,c2,c3,c4,c5):={ local L; L:=NULL; L:=L,octogonep5cjux(z,t,r,p,q,c1,c2,c3,c4,c5); L:=L,medianespc(z,t,r,p,q,c5); return L; }:;
onload
def octogonepave5c(z,t,r,p,q,c1,c2,c3,c4,c5): return octogonep5cjux(z,t,r,p,q,c1,c2,c3,c4,c5),medianespc(z,t,r,p,q,c5)
5 Les rosaces en couleur
5.1 la procédure rosaceocto
On modifie la procédure octogone :
Dans rosaceocto, on transforme les côtés du carré et de l’octogone
en arcs de cercle.
Les paramètres sont z affixe du centre de l’octogone, t angle que
fait une diagonale du caré avec l’axe des , r le rayon du cercle
circonscrit à l’octogone, 3 couleurs c1 pour les arcs de l’octogone et c2 pour les arcs du carré, c3 pour la couleur du fond (qui vaut par défaut 7) et u est l’angle
au centre des arcs qui seront dessinés (qui vaut par défaut (on peut choisir d’autres valeurs )
On utilise a comme variable locale pour désigner la moitié de la
longueur de la diagonale du carré.
On tape :
rosaceocto(z,t,r,c1,c2,c3=7,u=3*pi/8):={ local L,k,a; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); L:=L,affichage(cercle(z,r),c3+rempli); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3); pour k de 0 jusque 3 faire L:=L,affichage(segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8)),epaisseur_ligne_3); L:=L,affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),u,segment),c2+rempli); L:=L,affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),-u,segment),c2+rempli); fpour; pour k de 0 jusque 7 faire L:=L,affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),u,segment),c1+rempli); L:=L,affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),-u,segment),c1+rempli); fpour; return L; }:;
onload
Syntaxe Python :
def rosaceocto(z,t,r,c1,c2,equal(c3,7),equal(u,3*pi/8)): # local L,k,a L=seq[] r=evalf(r) a=r*sqrt(2)*sin(pi/8) L.append(affichage(cercle(z,r),c3+rempli)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3)) for k in range(4): L.append(affichage(segment(z+a*exp(i*k*pi/2+i*t),z+r*exp(i*k*pi/2+i*t)*cos(pi/8)),epaisseur_ligne_3)) L.append(affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),u,segment),c2+rempli)) L.append(affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),-u,segment),c2+rempli)) for k in range(8): L.append(affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),u,segment),c1+rempli)) L.append(affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),-u,segment),c1+rempli)) return(L)
5.2 la procédure rosaceoctogone
Dans rosaceoctogone, on transforme aussi les segments ,, et en arcs de cercle.
On utilise comme variables locales a pour désigner la moitié de la
longueur de la diagonale du carré et b pour désigner la
moitié de la longueur du côté du carré
rosaceoctogone(z,t,r,c1,c2,c3=7,u=3*pi/8):={ local L,k,a,b; L:=NULL; r:=evalf(r); a:=r*sqrt(2)*sin(pi/8); b:=r*sin(pi/8); L:=L,affichage(cercle(z,r),c3+rempli); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3); L:=L,affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3); pour k de 0 jusque 3 faire L:=L,affichage(arc(z+a*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)+i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t),-u/2,segment),c1+rempli); L:=L,affichage(arc(z+a*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)-i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t),+u/2,segment),c1+rempli); L:=L,affichage(triangle(z+a*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)+i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)-i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t)),c1+rempli); L:=L,affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),u,segment),c2+rempli); L:=L,affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),-u,segment),c2+rempli); fpour; pour k de 0 jusque 7 faire L:=L,affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),u,segment),c1+rempli); L:=L,affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),-u,segment),c1+rempli); fpour; return L; }:;
onload
Syntaxe Python :
def rosaceoctogone(z,t,r,c1,c2,equal(c3,7),equal(u,3*pi/8)): # local L,k,a,b L=[] r=float(r) a=r*sqrt(2)*sin(pi/8) b=r*sin(pi/8) L.append(affichage(cercle(z,r),c3+rempli)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*pi/4+i*t),z-r*cos(pi/8)*exp(i*pi/4+i*t)),epaisseur_ligne_3)) L.append(affichage(segment(z+r*cos(pi/8)*exp(i*3*pi/4+i*t),z-r*cos(pi/8)*exp(i*3*pi/4+i*t)),epaisseur_ligne_3)) for k in range(4): L.append(affichage(arc(z+a*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)+i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t),(-u)/2,segment),c1+rempli)) L.append(affichage(arc(z+a*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)-i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t),u/2,segment),c1+rempli)) L.append(affichage(triangle(z+a*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)+i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t),z+(r*cos(pi/8)-i*b*(1/sin(u/2)-1/tan(u/2)))*exp(i*k*pi/2+i*t)),c1+rempli)) L.append(affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),u,segment),c2+rempli)) L.append(affichage(arc(z+a*exp(i*k*pi/2+i*t),z+a*exp(i*(k+1)*pi/2+i*t),-u,segment),c2+rempli)) for k in range(8): L.append(affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),u,segment),c1+rempli)) L.append(affichage(arc(z+r*exp(i*pi/8+i*k*pi/4+i*t),z+r*exp(i*pi/8+i*(k+1)*pi/4+i*t),-u,segment),c1+rempli)) return(L)
5.3 Le pavage avec les rosaces octogonales
On modifie la procédure octogonejux :
rosaceoctogonejux(z,t,r,p,q,c1,c2,c3=7,u=3*pi/8):={ local L,j,k; L:=NULL; r:=evalf(r); pour j de 0 jusque q-1 faire pour k de 0 jusque p-1 faire L:=L,rosaceoctogone(z+2*r*cos(pi/8)*(k+i*j)*exp(i*t),t,r,c1,c2,c3,u); fpour; fpour; return L; }:;
onload
def rosaceoctogonejux(z,t,r,p,q,c1,c2,c3=7,u=3*pi/8): # local L,j,k; L=[] r=float(r) for j in range(q): for k in range(p): L.append(rosaceoctogone(z+2*r*cos(pi/8)*(k+i*j)*exp(i*t),t,r,c1,c2,c3,u)) return L
On utilise la procédure medianespc qui remplir le cercle circonscrit au
carré de la couleur c3 et qui trace les médianes du carré en
épaisseur 3 :
rosacemedianes(z,t,r,p,q,c3):={ local L,j,k,b,A; L:=NULL; r:=evalf(r); b:=r*sin(pi/8); pour j de 0 jusque q-2 faire pour k de 0 jusque p-2 faire A:=point(z+(r*cos(pi/8)+r*sin(pi/8))*exp(i*pi/4+i*t)+2*r*cos(pi/8)*(k+i*j)*exp(i*t)); L:=L,affichage(cercle(A,b*sqrt(2)),c3+rempli); L:=L,affichage(segment(A+b*exp(i*pi/4+i*t),A-b*exp(i*pi/4+i*t)),epaisseur_ligne_3); L:=L,affichage(segment(A+b*exp(3*i*pi/4+i*t),A-b*exp(3*i*pi/4+i*t)),epaisseur_ligne_3); fpour; fpour; return L; }:;
onload
Syntaxe Python :
def rosacemedianes(z,t,r,p,q,c3): # local L,j,k,b,A L=[] r=float(r) b=r*sin(pi/8) for j in range(q-2+1): for k in range(p-2+1): A=point(z+(r*cos(pi/8)+r*sin(pi/8))*exp(i*pi/4+i*t)+2*r*cos(pi/8)*(k+i*j)*exp(i*t)) L.append(affichage(cercle(A,b*sqrt(2)),c3+rempli)) L.append(affichage(segment(A+b*exp(i*pi/4+i*t),A-b*exp(i*pi/4+i*t)),epaisseur_ligne_3)) L.append(affichage(segment(A+b*exp(3*i*pi/4+i*t),A-b*exp(3*i*pi/4+i*t)),epaisseur_ligne_3)) return(L)
On modifie la procédure octogonepave :
rosaceoctogonepave(z,t,r,p,q,c1,c2,c3=7,u=3*pi/8):={ local L; L:=NULL; L:=L,medianespc(z,t,r,p,q,c3); L:=L,rosaceoctogonejux(z,t,r,p,q,c1,c2,c3,u); return L; }:;
onload
Syntaxe Python :
def rosaceoctogonepave(z,t,r,p,q,c1,c2,c3=7,u=3*pi/8): return medianespc(z,t,r,p,q,c3),rosaceoctogonejux(z,t,r,p,q,c1,c2,c3,u)