Nous allons maintenant dessiner des arbres. Pour cela, nous allons écrire une fonction doublement récursive de prototype
[!java]void [/!]tree([!java]int [/!]nbPas[!scala]:Int[/!], [!java]double [/!]longueur[!scala]:Double[/!], [!java]double [/!]angle[!scala]:Double[/!], [!java]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.
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.