14 - Imagens

07 - Yin yang

Na sétima atividade do semestre, temos o seguinte desafio: empregando a função keyReleased() do Processing, faça o Yin-yang diminuir sempre que uma tecla for pressionada.

Tela inicial da aplicação desenvolvida.

Yin e Yang são conceitos do taoismo que expõem a dualidade de tudo que existe no universo. Descrevem as duas forças fundamentais opostas e complementares que se encontram em todas as coisas: o yin é o princípio feminino, noite, Lua, a passividade, absorção. O yang é o princípio masculino, Sol, dia, a luz e atividade. [1] O desafio principal da tarefa é desenhar o símbolo usando conceitos de geometria, aplicar o alinhamento e diminuir o tamanho caso algum botão seja clicado.

Váriaveis de inicialização:



Black e white são as cores que são aplicadas nos círculos em diferentes posições. posX, e posY são as posições centrais da tela, e diametro a variável principal usada como parâmetro nas funções a seguir. A variável diam será explicado posteriormente, tendo como seu valor inicial o mesmo de diametro.

Funções:

void circulo(int x, int y, int diametro) {
  ellipse(x, y, diametro, diametro);
}

Essa função desenha um círculo simples, pois é uma maneira mais prática para desenhar os círculos alterando apenas seus diâmetros e posições na tela. 

void desenha(int x, int y, int diametro, int distancia) {
  noStroke();
  
  fill(black);
  circulo(x, y, diametro);
  
  fill(white);
  circulo(x, y + distancia, diametro);
  
  fill(white);
  circulo(posX, posY - (diametro/2), diametro/4);
  
  fill(black);
  circulo(posX, posY + (diametro/2), diametro/4);
}

Nessa funções são desenhados os dois círculos centrais do símbolo, e ainda, os círculos menores dentro destes anteriores. 

PS: As cores foram declaradas duas vezes porque foi necessário seguir uma ordem de desenho na tela, de outra maneira os círculos seriam sobrepostos não obtendo o resultado desejado. 

void arcs(int x, int y, int d) {
  noStroke();
  
  fill(white);
  arc(x, y, d, d, HALF_PI, HALF_PI + PI);
  
  fill(black);
  arc(x, y, d, d, 0, HALF_PI);
  arc(x, y, d, d, HALF_PI + PI, TWO_PI);
}

Os arcos existentes no Yin yang estão presentes nesta função. Essa função será ainda declarada dentro de outra função principal, a Yin_yang.

void Yin_yang(int diam) {
  arcs(posX, posY, diam);
  desenha(posX, posY - (diam/4), diam/2, diam/2);
}

É nesta função onde o diam entra. Primeiramente são desenhados os arcos e os círculos. O símbolo em si. Secundariamente, o diam tem seu valor alterado, como um contador. A cada botão pressionado a função keyReleased() decresce o valor da variável em 1, diminuindo o tamanho do símbolo. 

Como diferencial decidi implementar uma segunda função. Caso o tamanho do Yin yang esteja muito pequeno, um alerta é exibido na tela, afirmando que o tamanho mínimo foi atingido.

void alerta() {
  textSize(24);
  fill(255, 0, 0);
  text("Tamanho mínimo atingido!", 150, height-25);
}

Função de alerta.

Estágio final da interface após interação do usuário.

É possível fazer o download da tarefa neste link: Yin yang


Anúncio

Comentários