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 coor-
donné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),(xc, y + 9c)et (x, y + 11c),(x, y)étant la position du point
courant à l’entrée de la procédure, et cle 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 cen 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 cdivisé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 aet 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/3et a1;
tourner le repère de -60 degrés;
dessiner un arbre avec les paramètres 2c/3et a1;
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 0et 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
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !