segunda-feira, 1 de fevereiro de 2016

O olho do observador

Na aula de arco tangente, foi pedido para a sala de aula que produzisse uma aplicação no processing que simulasse um olho que seguiria o cursor do mouse.

Para isto, bastava calcular a inclinação que uma reta teria do centro até a posição que está o mouse, depois fazer duas circunferências: uma que represente a parte externa do olho e outra a pupila, que seguiria o cursor do mouse se limitando a ficar dentro da circunferência externa.

Durante a produção deste código, me lembrei do conhecido monstro de Dungeons and Dragons, o Beholder, e resolvi ilustrar o efeito colocando uma figura dele.

Segue o código abaixo comentado.

PImage beholder;
//variável que considera mouseX e o comprimento da tela
float a = 0;
//variável que considera mouseY e a altura da tela
float b = 0;
//variável que armazena o arco tangente
float arctan;



void setup(){
size(600,600);
beholder = loadImage("beholder.jpg");

}


void draw(){
  fill(255);
  background(255);
  //imagem do beholder
  image(beholder, 15, 50);
 
  //circunferência externa
 
  ellipse(width/2, height/2, 150,150);
  noStroke();
  fill(0);
  arctan = atan2(mouseY-height/2, mouseX-width/2);
  if(arctan<0){
    arctan += 2*PI;
  }
 
  a = mouseX - width/2;
  b = mouseY - height/2;
  //distância máxima que a "pupila" percorre
  a = 75*a/300*cos(arctan);
  b = 75*b/300*sin(arctan);
  //circunferência de dentro é feita considerando os quatro quadrantes dela
 
  //primeiro quadrante
 
 
  if(arctan>=0 && arctan<PI/2){
   
  ellipse(width/2 + a, height/2 + b, 25, 25);
 
  //segundo quadrante
  }else if(arctan>=PI/2 && arctan<PI){
   
  ellipse(width/2 - a, height/2 + b, 25, 25);
   //terceiro quadrante
  }else if(arctan>=PI && arctan<3*PI/2){
   
  ellipse(width/2 - a, height/2 - b, 25, 25);
  //quarto quadrante
  }else if(arctan>=3*PI/2 && arctan<2*PI){
   
  ellipse(width/2 + a, height/2 - b, 25, 25);
  }
 
}


Nenhum comentário:

Postar um comentário