Français   Arbres.

Longueur de branches aléatoires

Dans le premier programme, chaque nouvelle branche a une longueur équivalente aux trois quarts de la précédente. Si on change cette valeur, l'arbre entier est dessiné plus ou moins peit de manière proportionnelle.
En revanche, si on rend ce paramètre aléatoire, l'arbre va prendre un aspect plus naturel. On a ainsi des branches plus ou moins courtes. Le rapport de longueur est fixé à ((Random 4)+6)/10, ce qui donne un nombre compris entre 0.6 et 1.0.

La procédure demarrer a été réalisée pour tracer 99 arbres aléatoires consécutivement avec un petit laps de temps entre chaque tracé.

# Commande principale: demarrer
pour new
# set defaults, screen, pen et tortue
init ftd [400 400]
fcfg noir fcc vert levecrayon cachetortue
fin

pour tree :length
si :length< 10 [stop] # ends recursion si branch length too small
ftc :length/9 # reduce pen width as branch length gets smaller
fcc treecol :length # branch color depends on length
avance :length tournegauche :angle/2
tree :length * choix [0.7 0.75 0.8] tournedroite :angle
tree :length * choix [0.7 0.75 0.8] tournegauche :angle/2
levecrayon recule :length baissecrayon # return pour starting point
fin

pour treecol :length
donne "green arrondi 2.5*(100-:length) # vert depends on length
retourne phrase liste 255 :green 0 # rouge set pour 255 et bleu pour 0
fin

pour demarrer
repete 12 [new levecrayon recule 160 baissecrayon
donne "angle 60 tree 80 attends 200]
fin



Arbres avec angles aléatoires

De manière alternative, on peut changer l'angle entre chaque branche. On alors besoin de deux paramètres, l'un pour la longueur, l'autre pour l'angle. La longueur est initialisée à 0.75 comme auparavant. L'angle est fixé à ((Random 60)+25), ce qui donne une valeur entre 25 et 85 degrees.
# Commande principale: demarrer
pour new
# set defaults, screen, pen et tortue
init ftd [400 400]
fcfg noir fcc vert levecrayon cachetortue
fin

pour tree :length
si :length< 10 [stop] # ends recursion si branch length too small
ftc :length/9 # reduce pen width as branch length gets smaller
fcc treecol :length # branch color depends on length
donnelocale "angle choix [24 32 40 48 56 64 72]
avance :length tournegauche :angle/2
tree :length*0.75 tournedroite :angle # tree procedure with 3/4 branch length
tree :length*0.75 tournegauche :angle/2
levecrayon recule :length baissecrayon # return pour starting point
fin

pour treecol :length
donne "green arrondi 2.5*(100-:length) # vert depends on length
retourne phrase liste 255 :green 0 # rouge set pour 255 et bleu pour 0
fin

pour demarrer
repete 12 [new levecrayon recule 160 baissecrayon
tree 90 attends 200]
fin



Arbres aléatoires

En conclusion, nous pouvons changer l'angle entre un d'arbre et le prochain. J'ai appelé cette vaiable :TreeAngle et ai employé un procédé pour renvoyer un TreeAngle aléatoire de valeur (:Angle-10)+:Angle/10, qui pour un :Angle de 50 degrés, donne une valeur entre 5 et 45 degrés. Une fois de plus, changer cet angle produit de différents types d'arbres aléatoires (ou d'arbustes).
# Commande principale: demarrer
pour new
# set defaults, screen, pen et tortue
init ftd [400 400]
fcfg noir fcc vert levecrayon cachetortue
fin

pour tree :length
si :length< 10 [stop] # ends recursion si branch length too small
ftc :length/9 # reduce pen width as branch length gets smaller
fcc treecol :length # branch color depends on length
donnelocale "treeangle :angle*choix [0.25 0.375 0.5 0.625 0.75]
avance :length
tournegauche :treeangle
tree :length*0.75 tournedroite :angle # tree procedure with 3/4 branch length
tree :length*0.75 tournegauche :angle
tournedroite :treeangle
levecrayon recule :length baissecrayon # return pour starting point
fin

pour treecol :length
donne "green arrondi 2.5*(100-:length) # vert depends on length
retourne phrase liste 255 :green 0 # rouge set pour 255 et bleu pour 0
fin

pour demarrer
repete 12 [new levecrayon recule 160 baissecrayon
donne "angle 60 tree 80 attends 200]
fin

Tester le programme maintenant

Procédure à exécuter:
demarrer