Hexagone, rosaces et fleurs

Renée De Graeve

2019

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 AA et BB est formée par 2 arcs de cercle de rayon rr : l’arc ABAB d’angle au centre π/3\pi/3 et l’arc ABAB d’angle au centre π/3-\pi/3 (rr est donc aussi la longueur de la pétale).
On tape le proramme rosace(z,t,r,c,b=0)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 OxOx), 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 π/3\pi/3 :


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 π/6\pi/6 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 2r2r 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 00 et de sommet d’affixe 55 :




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 π/6\pi/6, avec leur cercle et centrées aux sommets de l’hexagone régulier de centre d’affixe 00 et de sommet d’affixe 55 :




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 3r3r 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 π/6\pi/6 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 nrnr:

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 à OxOx, r la longueur de chaque pétale et c la couleur des pétales.fleur1 est contenue dans un cercle de rayon 1*r1*r
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 ABCABC :
AA a pour affixe z, ABAB fait un angle t avec 0x0x, les cotés ABAB,BCBC et ACAC sont des pétales formées d’arc de cercle de rayon rr et d’angle au centre π/3\pi/3 et π/3-\pi/3 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 n=4n=4 :

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é ACAC 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 kπ/3k\pi/3 pour k=0..5k=0..5 :

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 π/6\pi/6 :


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 kπ/3k\pi/3 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 n=4n=4 fleuri en rouge :


et pour n=5n=5 fleuri en bleu et tournée de π/6\pi/6 :

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

  


This document was translated from LATEX by HEVEA.