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