domingo, 15 de setembro de 2019

Tarefa 6 - Ao infinito e além do Yin Yang

"crie uma função recursiva que crie o efeito do yin yang infinito, dando atenção ao controle do limite, e discuta a implementação de um zoom para seu programa"

obs: Pedi para o professor Melo para que pudesse publicar minha tarefa do yin yang no lugar da tarefa de fibonacci, pois ela já estava quase completa no dia em que foi postada na pasta do drive.

Yin Yang, equilíbrio não apenas na imagem, mas na forma e na proporção. E uma das mais comuns tatuagens hoje em dia.

Para chegar ao resultado desejado, foi necessário um estudo do uso de funções recursivas, que ainda não havia sido estudada em Programação II. Mas a lógica do Yin Yang infinito independe do nosso conhecimento de programação. Vamos a ela.

O que há de comum na estrutura deste desenho aparentemente confuso? Apenas uma mente em pleno equilíbrio pode responder.

Temos acima um círculo que dentro de si contém dois círculos. Cada um desses círculos menores conterá outros dois círculos dentro de cada um deles. E cada um desses círculos menores ainda possuirão outros dois círculos em seu interior. É logo perceptível a presença de uma progressão definida na geração de nossa imagem:
1 -> 2 -> 4 -> 8 -> 16 -> infinito...
É possível então escolhermos a quantidade de círculos que desejamos desenhados na tela, em uma função que dentro dela: desenhará um círculo e em seguida chamará a si mesma para desenhar outros dois círculos menores em posições relativas ao seu centro atual.

A produção dos símbolos é um tanto quanto complexa, é necessário levar em consideração a variação de cor entre preto e branco e se o novo círculo ficará em cima ou em baixo. Talvez no futuro quando tiver estudado mais programação eu consiga "limpar" esse código e torná-lo mais curto.

O parâmetro control é importantíssimo para controlarmos a parada da produção de nossos círculos. Sem ele nossa função se tornará infinita e o processing entrará em pane. Introduzimos na chamada da função a quantidade de camadas que desejamos que nosso yin yang tenha pelo control.

Para gerar um efeito de zoom, foi necessário apenas aumentar geometricamente o valor do diâmetro. É importante frisar a importância desse aumento ser geométrico, pois se for feito por progressão aritmética, a velocidade do zoom diminuirá a cada segundo, pois o aumento não será proporcional a redução de tamanho que os círculos seguem, pois eles seguem uma P.G. de razão fracionária.

Um aumento de apenas 1% parece pouca coisa, mas é importante lembrar que o processing roda a 60 FPS, então esse aumento seria superior a 60% por segundo (aproximadamente 80%).

Essa talvez tenha sido a tarefa mais divertida até agora, o uso de recursividade pode ser um tanto desafiador e estressante, mas os resultados aplicados a computação gráfica são belíssimos.

Código em Processing: Tarefa 6.

Nenhum comentário:

Postar um comentário