Vamos agora construir árvores. Para isto, vamos escrever um método a usar recursão dupla a seguir este protótipo
[!java|c]void [/!]árvore([!java|c]int [/!]passos[!scala]:Int[/!], [!java|c]double [/!]comprimento[!scala]:Double[/!], [!java|c]double [/!]ângulo[!scala]:Double[/!], [!java|c]double [/!]shrink[!scala]:Double[/!])
Para desenhar uma árvore de quatro níveis, deve desenhar um tronco do comprimento dado, virar à direita num ângulo dado, desenhar uma árvore de nível 3, virar a esquerda duas vezes no ângulo dado, desenhar outra árvore de nível 3 e voltar à posição inicial. Não se esqueça de voltar à posição inicial!
Se um tronco da árvore é de comprimento 'len', o tronco da árvore no próximo nível será de comprimento 'len*shrink'.
Finalmente, aqui está o pseudo-código do caso geral (deve adicionar o caso base por si só):
Mova para a frente no comprimento desejado Desenhe (recursivamente) a sub-árvore da direita Desenhe (recursivamente) a sub-árvore da esquerda Mova para trás para a posição inicial
Não se esqueça de adicionar o caso base ao seu código, ou o seu buggle vai entrar num loop infinito. Então, desenhar a sub-árvore da direita é virar a direita e desenhar a sub-árvore.
Como pode ver, cada nível de recursão é representado por uma cor
diferente. Para isto, tem que chamar o current(step)
, passar o
nível de recursão atual como parâmetro. Isto vai escolher a cor certa para
si. Não apague as suas belas cores quando se mover de volta para sua posição
inicial.
Se a função foi feita errada, pode rapidamente ficar muito difícil de
depurar, pois, os erros vão aparecer em cada nível da recursão, a mudar
completamente o desenho. Por questões de depuração, pode usar o
subtree()
que vai desenhar uma sub-árvore corretamente. Esta
função é, portanto muito similar àquela que está a tentar escrever. A única
diferença é que subtree()
apenas desenha em preto. Logo, pode
usar ela no lugar da chamada recursiva para depurar o seu código, mas vai
ter que mudar para uma chamada recursiva adequada no seu próprio código (uma
vez que funcione) para obter as cores certas e passar no exercício.