A curva do dragão (2)

A solução anterior "induz" que a tartaruga se teletransporta para outro local, ou pelo menos, que ela levanta a caneta durante o desenho. Na verdade, o final do desenho da primeira chamada recursiva não coincide com o começo da segunda chamada recursiva. É por isto que nós temos que usar o método setPos()

Nesta lição, você vai escrever um método recursivo que permita desenhar a curva do dragão sem levantar a caneta. Para isto, precisamos de outro método recursivo que desenhe o lado espelhado da curva.

O método dragon() é então definido recursivamente usando ele próprio e dragonReverse(). Da mesma forma, o método dragonReverse() é definido recursivamente usando ele próprio e dragon(). Este é, portanto, um exemplo de recursão mútua.

O protótipo do método dragon() é o mesmo do exercício anterior:

[!java|c]void [/!]dragão([!java|c]int [/!]ordem[!scala]:Int[/!], [!java|c]double [/!]x[!scala]:Double[/!], [!java|c]double [/!]y[!scala]:Double[/!], [!java|c]double [/!]z[!scala]:Double[/!], [!java|c]double [/!]t[!scala]:Double[/!])

A coordenada do novo ponto (u, v) introduzida pelo dragon() é:

u = (x + z)/2 + (t - y)/2
v = (y + t)/2 - (z - x)/2

O protótipo do método dragonReverse é similar:

[!java|c]void [/!]inverterDragão([!java|c]int [/!]order[!scala]:Int[/!], [!java|c]double [/!]x[!scala]:Double[/!], [!java|c]double [/!]y[!scala]:Double[/!], [!java|c]double [/!]z[!scala]:Double[/!], [!java|c]double [/!]t[!scala]:Double[/!])

A coordenada do novo ponto (u, v) introduzida pelo dragonReverse() é:

u = (x + z)/2 - (t - y)/2
v = (y + t)/2 + (z - x)/2

Para deixar o trabalho de cada um dos dois métodos recursivos mais visível, a linha pintada pelo dragon() deve ser vermelha (Color.red) enquanto que a linha pintada pelo dragonReverse() deve ser azul(Color.blue).

Dê uma olhada em cada visão de mundo objetivo para entender como escrever a função.