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