Des arbres 1 Le tronc 2 Les feuilles 3 Un arbrisseau 4 Un premier

publicité
Des arbres
Le but de ce projet est de dessiner un arbre. Les longueurs sont données en point.
1
Le tronc
Écrire une procédure tronc qui dessine une ligne :
– d’épaisseur c (paramètre de la procédure),
– de longueur 10c,
– de couleur (0.6, 0.3, 0) dans l’espace RGB,
– parallèle à l’axe des ordonnées,
– à partir du point courant (on peut utiliser la fonction currentpoint pour avoir les coordonnées du point courant).
À la fin de la procédure le point courant ne doit pas changer.
2
Les feuilles
Écrire une procédure feuilles qui dessine trois triangles :
– de côté 5,
– aux positions (x + c, y + 9c), (x − c, y + 9c) et (x, y + 11c), (x, y) étant la position du point
courant à l’entrée de la procédure, et c le paramètre de la procédure,
– de couleurs (0, 0.3, 0), (0, 0.5, 0) et (0, 0.7, 0).
À la fin de la procédure le point courant ne doit pas changer.
3
Un arbrisseau
Écrire une procédure arbrisseau, prenant un paramètre c en entrée, qui dessine un tronc et
trois feuilles triangulaires à partir du point courant, avec le paramètre c.
À la fin de la procédure le point courant ne doit pas changer.
4
Un premier arbre
Modifier la procédure arbrisseau (et la renommer arbre)
– pour qu’elle s’appelle récursivement deux fois ;
– afin qu’elle ne s’appelle pas indéfiniment, on utilisera un nouveau paramètre, a, que l’on
décrémentera à chaque appel récursif ; lorsqu’il sera nul, on dessinera un arbrisseau (a
mesure la profondeur de récursion) ;
– avant les appels récursifs d’arbre, on changera le point courant aux coordonnées (x, y + 9c)
et on tournera le repère de 30 degrés au premier appel et de −30 degrés au deuxième appel ;
– on réalisera les appels récursifs d’arbre avec une valeur de c divisée par 1.5, pour faire
décroître la taille des branches.
La procédure ne doit modifier ni le point courant, ni l’orientation des axes.
L’algorithme est donc le suivant (l’appel se fait avec les paramètres a et c) :
1
début
si a = 0 alors
dessiner un arbrisseau ;
sinon
soit (x, y) le point courant;
dessiner un tronc;
aller au point (x, y + 9c);
tourner le repère de 30 degrés;
dessiner un arbre avec les paramètres 2c/3 et a − 1;
tourner le repère de -60 degrés;
dessiner un arbre avec les paramètres 2c/3 et a − 1;
tourner le repère de 30 degrés;
revenir au point (x, y);
fin
En principe on devrait obtenir ce résultat :
5
Un vrai ( ?) arbre
Afin que l’arbre dessiné soit un peu plus réaliste :
– on va rajouter un élément aléatoire pour que l’angle de rotation ne soit pas toujours 30
ou −30 mais puisse varier entre −50 et 50 (on peut utiliser pour cela la fonction rand qui
retourne un entier compris entre 0 et 231 ) ;
– on commencera avec a = 6 ;
2
– on utilisera un paramètre supplémentaire nb_branches qui sera le nombre de branches qui
partiront d’un tronc (commencer avec 4) ;
– on dessinera les feuilles pour les dernières profondeurs, c’est-à-dire pour les valeurs de a
inférieures à un certain seuil (commencer par 3) ;
– penser à utiliser gsave et grestore pour que l’orientation des axes ne change pas entre les
appels récursifs.
– Faire divers essais en modifiant l’angle, la longueur initiale des troncs, le nombre de branches
par troncs, la profondeur de récursion. . .
Voila un exemple d’arbre aléatoire produit (c = 15, a = 7, nb_branches = 6, angle aléatoire
entre 50 et −50 degrés, racine de la suite aléatoire 57) :
3
Téléchargement