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.
# 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 |