Hexagone, rosaces et fleursRenée De Graeve2019 |
Contents
1 Introduction
Tout le monde sait tracer avec un compas un hexagone régulier et une rosace
à 6 pétales.
À partir de cette rosace nous allons
programmer beaucoup d’autres dessins...
2 Les rosaces
2.1 La rosace à 6 pétales
Nous allons colorer les pétales de cette rosace avec la commande arc de
Xcas qui permet de dessiner soit un arc de cercle, soit de remplir
un segment de cercle.
Une pétale d’extrémités et est formée par 2 arcs de cercle de
rayon : l’arc d’angle au centre et l’arc d’angle au centre
( est donc aussi la longueur de la pétale).
On tape le proramme rosace(z,t,r,c,b=0) où z est l’affixe du
centre du cercle, t est l’angle de rotation de la rosace autour de son
centre (si t=0 il y a une pétale parallèle à l’axe ), r
est la longueur d’une pétale (i.e r est aussi le rayon du cercle
contenant la rosace), c la couleur de la rosace et
b est un booléen qui dit si on trace aussi le cercle contenant la
rosace (par défaut b=0 i.e ce cercle n’est pas tracé).
On tape :
rosace(z,t,r,c,b=0):={ local L,k; L:=NULL; pour k de 0 jusque 5 faire si b!=0 alors L:=L,affichage(cercle(z,r),c);fsi; L:=L,affichage(arc(z,z+r*exp(i*k*pi/3+i*t),-pi/3,segment),c+rempli); L:=L,affichage(arc(z,z+r*exp(i*k*pi/3+i*t),pi/3,segment),c+rempli); fpour; return L; }:;
onload
Voici 2 rosaces : la première avec son cercle et la deuxième translatée et
tournée d’un angle de :
2.2 La ronde de 6 rosaces autour d’une rosace
Autour de la rosace précédente, on va faire une ronde avec 6 rosaces se
tenant toutes par l’extrémité de leurs pétales rosace0 a comme
paramètres, les paramètres de la rosace située au centre)
On tape :
rosace0(z,t,r,c,b=0):={ local L,k; L:=NULL; pour k de 0 jusque 5 faire L:=L,rosace(z+sqrt(3)*r*exp(i*k*pi/3+i*pi/6+i*t),t,r,c+k,b); fpour; return L; }:;
onload
Voici 7 rosaces de couleurs différentes sans leurs cercles :
:
Voici 7 rosaces de couleurs différentes, tournées de avec leurs
cercles :
:
On peut aussi faire une ronde de 6 rosaces d’une même couleur, centrées aux
sommets de d’un hexagone régulier de côté r. Cette rosace est
contenue dans un cercle de rayon et on l’a nomme rosace2 :
rosace2(z,t,r,c,b=0):={ local L,k; L:=NULL; pour k de 0 jusque 5 faire L:=L,rosace(z+r*exp(i*k*pi/3+i*t),t,r,c,b); fpour; return L; }:;
onload
Voici rosace et rosace2, sans leur cercle, centrées au sommet de
l’hexagone régulier de centre d’affixe et de sommet d’affixe :
On remarquera que lorsqu’on trace les 6 rosaces centrées au sommet d’un
hexagone régulier, on obtient aussi la rosace centrale.
Voici plusieurs rosace2 tournées de , avec leur cercle et
centrées aux sommets de l’hexagone régulier de centre d’affixe et de
sommet d’affixe :
Exercice1
Pouvez-vous prévoir ce que fait le programme suivant ?
rosace02(z,t,r,c,b=0):={ local L,k; L:=NULL; pour k de 0 jusque 5 faire L:=L,rosace(z+r*exp(i*k*pi/3),t,r,c,b); fpour; return L; }:;
onload
2.3 La ronde de 12 rosaces autour de rosace2
Autour de la rosace rosace2, on va faire une ronde avec 12 rosaces
centrées au sommet d’un dodécagone régulier. Cette rosace est
contenue dans un cercle de rayon et on la nomme rosace3.
On tape :
rosace3(z,t,r,c,b=0):={ local L,k; L:=NULL; L:=L,rosace2(z,t,r,c); pour k de 0 jusque 5 faire L:=L,rosace(z+r*sqrt(3)*exp(i*k*pi/3+i*pi/6+i*t),t,r,c,b); L:=L,rosace(z+2*r*exp(i*k*pi/3+i*t),t,r,c,b); fpour; return L; }:;
onload
Voici rosace3 en rouge avec leurs cercles et rosace3 en bleu
tournée de avec leurs cercles :
On peut mettre des couleurs différentes (à vous de choisir vos couleurs !):
rosacec3(z,t,r,c,b=0):={ local L,k; L:=NULL; L:=L,rosace2(z,t,r,c); pour k de 0 jusque 5 faire c:=c+2; L:=L,rosace(z+r*sqrt(3)*exp(i*k*pi/3+i*pi/6+i*t),t,r,c,b); c:=c+1; L:=L,rosace(z+2*r*exp(i*k*pi/3+i*t),t,r,c,b); fpour; return L; }:;
onload
Une couronne de lauriers :
Exercice2
Combien de pétales manquent au dessin lorsque dans rosace3 on remplace
rosace2(z,t,r,c); par rosace(z,t,r,c); ?
Exercice3
Pouvez-vous prévoir ce que fait le programme suivant ?
rosace03(z,t,r,c,b=0):={ local L,k; L:=NULL; L:=L,rosace2(z,t,r,c); pour k de 0 jusque 5 faire L:=L,rosace(z+r*sqrt(3)*exp(i*k*pi/3+i*pi/6+i*t),t,r,c,b); L:=L,rosace(z+2*r*exp(i*k*pi/3+i*t),t+pi/6,r,c,b); fpour; return L; }:;
onload
Pour comprendre, changer c en c+1 dans la dernière instruction,
puis compiler et exécuter les commandes ci-dessus.
3 Les fleurs
On appelle "fleur" les rosaces précédentes lorsqu’elles sont entourées de
pétales. On les appellera fleur1, fleur2,fleur3... (resp fleur
si on rajoute le paramètre n) lorsque le plus petit cercle qui les
contiennent a pour rayon 1*r,2*r,3*r... (resp n*r).
Voici par exemple fleur1 et fleur2 :
Dans les programmes précédents, il y a beaucoup de pétales qui se
superposent : on fait donc des tracés inutiles.
Pour éviter les tracés inutiles, on va voir une fleur comme formée de
triangles équilatéraux ayant comme côtés des pétales dont la longueur
est r (tripetale) et on va la décomposer en 6 triangles
équilatéraux de côtés :
3.1 La fleur1
On appelle fleur1 la rosace centrale et les 6 pétales qui l’entourent.
On utilise le programme rosace de paramètres :
z est le centre de la graine, t son angle de rotation par rapport
à , r la longueur de chaque pétale et c la couleur des
pétales.fleur1 est contenue dans un cercle de rayon
On tape :
fleur1(z,t,r,c):={ local L,k; L:=NULL; L:=L,rosace(z,t,r,c); pour k de 0 jusque 5 faire L:=L,affichage(arc(z+5*exp(i*k*pi/3+i*t),z+5*exp(i*(k+1)*pi/3+i*t),pi/3,segment),c+rempli); L:=L,affichage(arc(z+5*exp(i*k*pi/3+i*t),z+5*exp(i*(k+1)*pi/3+i*t),-pi/3,segment),c+rempli); fpour; return L; }:;
onload
Les dessins précédents avec différentes couleurs :
3.2 Un triangle équilatéral ayant pour côtés des pétales
tripetale(z,t,r,c) trace le triangle équilatéral :
a pour affixe z, fait un angle t avec , les cotés , et sont des pétales formées d’arc de cercle de rayon et
d’angle au centre et et c est la couleur des pétales.
On tape :
tripetale(z,t,r,c):={ local L,k; L:=NULL; pour k de 0 jusque 1 faire L:=L,affichage(arc(z,z+5*exp(i*k*pi/3+i*t),-pi/3,segment),c+rempli); L:=L,affichage(arc(z,z+5*exp(i*k*pi/3+i*t),pi/3,segment),c+rempli); fpour; L:=L,affichage(arc(z+5*exp(i*t),z+5*exp(i*pi/3+i*t),-pi/3,segment),c+rempli); L:=L,affichage(arc(z+5*exp(i*t),z+5*exp(i*pi/3+i*t),pi/3,segment),c+rempli); return L; }:;
onload
3.3 Un triangle équilatéral formé de n tripetale
Voici un triangle équilat’eral de côté 2*r qui est formé de
3 triangles tripetale :
On peut voir un triangle équilat’eral formé de n triangles
tripetale comme une ligne de n tripetale surmonté par un
triangle équilat’eral formé de n-1 triangles tripetale.
On écrit donc une procédure récursive (on pourra modifier par exemple
la couleur c en c+1 dans l’appel récursif) :
tripetaler(z,t,r,c,n):={ local L,k; L:=NULL; si n>0 alors pour k de 0 jusque n-1 faire L:=L,tripetale(z+k*r*exp(i*t),t,r,c); fpour; L:=L,tripetaler(z+r*exp(i*pi/3+i*t),t,r,c,n-1); fsi; return L; }:;
onload
Voici le résultat quand :
Mais maleureusement il y a encore des pétales qui sont tracées 2 fois !
3.4 On change tripetale en tripetaleb en ajoutant le paramètre b
Pour éviter ces superpositions de pétales, on va définir
tripetaleb rajouter un paramètre à tripetale :
b est un booléen qui par défaut vaut 1 (b=1) et cela ne change pas tripetale, mais si b!=1, le côté du triangle
équilatéral ne sera pas tracé.
On tape :
tripetaleb(z,t,r,c,b=1):={ local L,k; L:=NULL; L:=L,affichage(arc(z,z+5*exp(i*t),-pi/3,segment),c+rempli); L:=L,affichage(arc(z,z+5*exp(i*t),pi/3,segment),c+rempli); si b==1 alors L:=L,affichage(arc(z,z+5*exp(i*pi/3+i*t),-pi/3,segment),c+rempli); L:=L,affichage(arc(z,z+5*exp(i*pi/3+i*t),pi/3,segment),c+rempli); fsi; L:=L,affichage(arc(z+5*exp(i*t),z+5*exp(i*pi/3+i*t),-pi/3,segment),c+rempli); L:=L,affichage(arc(z+5*exp(i*t),z+5*exp(i*pi/3+i*t),pi/3,segment),c+rempli); return L; }:;
onload
3.5 Modification de tripetaler en tripetalebr
On modifie la une procédure récursive tripetaler (onchange la couleur
dans l’appel récursif pour voir la récursivité) :
tripetalebr(z,t,r,c,n):={ local L,k; L:=NULL; si n>0 alors L:=L,tripetaleb(z,t,r,c,0); pour k de 1 jusque n-1 faire L:=L,tripetaleb(z+k*r*exp(i*t),t,r,c); fpour; L:=L,tripetalebr(z+r*exp(i*pi/3+i*t),t,r,c+1,n-1) fsi; return L; }:;
onload
Puis, on tape la procédure fleur qui consiste à faire pivoter
tripetalerb de pour :
fleur(z,t,r,c,n):={ local L,k; L:=NULL; pour k de 0 jusque 5 faire L:=L,tripetalebr(z,t+k*pi/3,r,c,n); fpour; return L; }:;
onload
Voici la fleur4 (n=4 :
la même fleur tournée de :
Ou bien, on écrit une procédure iterative tripetalebi (ici on ne
change pas la couleur) :
tripetalebi(z,t,r,c,n):={ local L,k,j; L:=NULL; pour j de 1 jusque n faire //L:=L,tripetaleb(z,t,r/10,c+j-1,0); L:=L,tripetaleb(z,t,r/10,c,0); pour k de 1 jusque n-j faire //L:=L,tripetaleb(z+k*r*exp(i*t),t,r/10,c+j-1); L:=L,tripetaleb(z+k*r*exp(i*t),t,r/10,c); fpour; z:=z+r*exp(i*pi/3+i*t); fpour; return L; }:;
onload
Puis on fait pivoter tripetalebi de et on tape la procédure
fleuri :
fleuri(z,t,r,c,n):={ local L,k; L:=NULL; pour k de 0 jusque 5 faire L:=L,tripetalebi(z,t+k*pi/3,r,c,n) fpour; return L; }:;
onload
Voici pour fleuri en rouge :
et pour fleuri en bleu et tournée de :
Exercice4
Écrire une procédure (récursive ou itérative) qui dessine des disques
de couleur représentant le coeur des fleurs, par exemple :
On peut faire cela à l’intérieur de la procédure tripetaleb ou
écrire une procédure itérative indépendante coeuri ou encore une
procédure récursive indépendante coeur.
//avec une procedure iterative coeuri(z,t,r,c,n):={ local L,k,j; L:=NULL; pour j de 1 jusque n faire pour k de 0 jusque n-j faire L:=L,affichage(cercle(z+k*r*exp(i*t),r/10),c+rempli); fpour; z:=z+r*exp(i*pi/3+i*t); fpour; return L; }:;
onload
//puis il faut faire pivoter coeuri de k*pi/3 dans fleuric qui a 2
paramètres couleur, c1 pour les pétales et c2 pour le coeur.
fleuric(z,t,r,c1,c2,n):={ local L,k; L:=NULL; L:=L,fleuri(z,t,r,c1,n); pour k de 0 jusque 5 faire L:=L,coeuri(z,t+k*pi/3,r,c2,n); fpour; return L; }:;
onload
//avec une procedure recursive :
coeur(z,t,r,c,n):={ local L,k; L:=NULL; si n>0 alors pour k de 0 jusque n faire L:=L,affichage(cercle(z+k*r*exp(i*t),r/10),c+rempli); fpour; L:=L,coeur(z+r*exp(i*pi/3+i*t),t,r,c,n-1); fsi; return L; }:;
onload
//puis il faut faire pivoter coeur de k*pi/3 dans fleurc qui a 2
paramètres couleur, c1 pour les premières pétales et c2 pour
le coeur.
fleurc(z,t,r,c1,c2,n):={ local L,k; L:=NULL; L:=L,fleur(z,t,r,c1,n); pour k de 0 jusque 5 faire L:=L,coeur(z,t+k*pi/3,r,c2,n); fpour; return L; }:;
onload