TP : Arbres fractals

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.

Arbre fractal à construire

1. Tracer une branche en Y (sans récursivité).

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

Pensez à utiliser 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.

2. Généraliser en récursif.

Définition récursive de l'arbre fractal

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

  1. Quel est le cas de base (n = 0) ? Que fait-on "simplement" dans ce cas ? (Vous pouvez par exemple choisir de dessiner une petite feuille, ou simplement ne rien dessiner de plus : c'est vous qui décidez.)
  2. En vous inspirant de la figure de la partie 1 (mais en remplaçant chaque branche simple par un appel récursif), écrire la fonction récursive arbre(n, longueur) qui trace l'arbre fractal.

3. Programme principal.

Testez votre fonction avec plusieurs profondeurs. Pour un affichage rapide, pensez à turtle.tracer(0) avant l'appel et turtle.update() juste après.

Pour varier les couleurs

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

Bonus : l'arbre de Pythagore.

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

  1. Écrire une fonction non récursive carre(cote) qui trace un carré de côté cote.
  2. En vous inspirant du travail fait sur l'arbre fractal, écrire une fonction récursive 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).