top of page

ATV15

  • Foto do escritor: Marcos André
    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


Sobre mim!

Meu nome é Marcos André, sou aluno de Ciência da Computação na Faculdade Farias Brito e Sistemas e Mídias digitais na UFC.Esse blog,será utilizado para postagem e divulgação de trabalhos realizados em ambos os cursos.

Outros Posts

© 2023 by BI World. Proudly created with Wix.com

bottom of page