Arbres

Nous allons maintenant dessiner des arbres. Pour cela, nous allons écrire une fonction doublement récursive de prototype

[!java|c]void [/!]tree([!java|c]int [/!]nbPas[!scala]:Int[/!], [!java|c]double [/!]longueur[!scala]:Double[/!], [!java|c]double [/!]angle[!scala]:Double[/!], [!java|c]double [/!]multiplicateur[!scala]:Double[/!])

Pour dessiner un arbre à quatre étages, il faut dessiner un tronc de la taille indiquée, tourner à droite de l'angle indiqué, faire un arbre à 3 étages, tourner à gauche de deux fois l'angle indiqué, faire un autre arbre à 3 étages, puis revenir à sa position initiale. N'oubliez pas de revenir à la position initiale !

Si le tronc d'un arbre mesure length à l'étage N, il mesure shrink*length à l'étage N+1.

At the end, here is the pseudo-code of the general case (you should add the base case yourself):

  Move forward of the desired length
  Draw (recursively) the right subtree
  Draw (recursively) the left subtree
  Move back to your initial position

Don't forget to add the base case to your code, or your buggle will enter an infinite loop. Then, drawing the right subtree comes down to turn right and then draw the subtree.

Comme vous pouvez le voir, chaque étage de la récursion est représenté par une couleur distinctive. Pour cela, appelez la fonction current(step) en lui passant en paramètre l'étage actuel de la récursion. Elle se chargera de choisir la couleur adéquate. N'effacez pas vos couleurs quand vous retournez à votre position initiale.

Si vous vous trompez dans votre fonction, il peut facilement devenir très compliqué de debugger votre code. Vos erreurs se produisant à tous les étages de la récursion, le dessin peut vite devenir illisible. Pour vous aider à debugger, vous pouvez utiliser la fonction subtree() qui dessine un sous-arbre correct. Cette fonction est très (très) semblable par ailleurs à la fonction que vous tentez d'écrire. La seule différence est que subtree() ne dessine qu'en noir. Vous pouvez donc l'utiliser à la place de vos appels récursifs pendant le debug, mais vous devez changer pour des appels récursifs à votre propre code (quand il marche) pour avoir les couleurs justes, et donc pour passer l'exercice.