Après le flocon de von Koch, on s'attaque à une autre fractale classique : l'arbre fractal. Le principe est le même : une figure définie récursivement, où chaque partie ressemble à la figure entière, en plus petit.
Avant de passer au récursif, échauffez-vous en traçant, avec de simples forward/backward/left/right (sans fonction récursive), la figure suivante : un tronc, puis une branche vers la gauche inclinée de 20°, un retour au sommet du tronc, une branche vers la droite inclinée de 20° (par rapport au tronc), et un retour au point de départ du tronc (la tortue doit terminer avec la même position et le même cap qu'au départ).
backward() pour "reculer" le long d'une branche déjà tracée, plutôt que de lever le stylo : c'est plus simple ici puisqu'on repasse exactement sur le même segment.
Un arbre de profondeur n et de longueur longueur est formé de 2 sous-arbres de profondeur n - 1 et de longueur longueur × 2/3, comme sur la figure ci-dessus (angle vers la gauche = angle vers la droite = 20° par rapport au tronc précédent).
arbre(n, longueur) qui trace l'arbre fractal.Testez votre fonction avec plusieurs profondeurs. Pour un affichage rapide, pensez à turtle.tracer(0) avant l'appel et turtle.update() juste après.
Vous pouvez essayer de faire varier la couleur ou l'épaisseur du trait (turtle.color(...), turtle.width(...)) en fonction de la profondeur n restante, pour un rendu plus réaliste (tronc épais et marron, feuilles fines et vertes par exemple).
Si vous avez terminé et souhaitez aller plus loin, voici une autre fractale classique, construite cette fois à partir de carrés plutôt que de branches : l'arbre de Pythagore. Chaque carré porte, sur son côté supérieur, 2 carrés plus petits inclinés de 45°, dont la taille est divisée par √2 (on retrouve le triangle rectangle isocèle du théorème de Pythagore, d'où le nom de cette fractale).
carre(cote) qui trace un carré de côté cote.pythagore(cote, profondeur) qui trace l'arbre de Pythagore. Vous devrez réfléchir à la façon de repositionner la tortue entre les deux carrés "enfants" (vous pouvez utiliser turtle.penup()/turtle.pendown() comme dans le TP sur le triangle de Sierpiński).