ATV15
- Marcos André
- 2 de jul. de 2016
- 2 min de leitura

"Criar um olho (círculo preto pequeno no interior de
círculo branco grande) que se encontra sempre
voltado para o cursor do mouse."
A realização da tarefa foi bem simples, visto que existe um exemplo no Processing que traz uma aplicação semelhante,porém, orientada a objetos que realiza função idêntica.
Para realizar a tarefa, importei uma imagem de uma iris, e passei a usar a referência ao centro da imagem.Depois usei o método .resize para que o tamanho do olho não ficasse "hard coded".Para conferir um formato mais natural à esclerótica, adicionei um pequeno valor a largura da elipse.
Logo depois, utilizando uma função que calcula a distância entre dois pontos segundo a fórmula:

int(abs(sqrt(pow((x1-x2), 2)+pow((y1-y2), 2))));
Onde é retornado o valor inteiro e absoluto correspondente ao resultado da fórmula, fiz uma comparação lógica para saber se o cursor encontra-se dentro ou fora do olho, e, de acordo com esse resultado chamo a função correspondente à cada caso.
Na função foraDoOlho() é Calculado o ângulo ( em radianos ) a partir de um ponto especificado para a origem das coordenadas , a partir do eixo X positivo com a função atan2().
Na outra função,dentroDoOlho(), a Iris é desenhada na posição MouseX e MouseY.
Segue Código:
PImage Iris;
int size=250;
void setup() { size(600, 600); stroke(40,90,40); strokeWeight(14); Iris=loadImage("iris.png"); Iris.resize(size/2,size/2); blendMode(HARD_LIGHT); }
void draw() { background(80,100,55); fill(250); ellipse(width/2, height/2, /*Confere a ellipse*/size+(20)/* um formato mais natural*/+(Iris.width/2), size+(Iris.height/2)); if (distancia(mouseX,mouseY,width/2,height/2)>size/3) foraDoOlho(width/2, height/2); else dentroDoOlho();
}
void foraDoOlho(int x, int y) {
float angulo = atan2(mouseY-y, mouseX-x);
pushMatrix();
translate(x, y); rotate(angulo); fill(25,80,25); image(Iris, 0, 0);
popMatrix(); }
void dentroDoOlho() {
image(Iris,mouseX-Iris.width/2,mouseY-Iris.height/2);
}
int distancia(int x1, int y1, int x2, int y2) { return int(abs(sqrt(pow((x1-x2), 2)+pow((y1-y2), 2)))); }
Kommentare