Exercício 20 - O olho
Neste exercício irei criar um olho que se encontra sempre
voltado para o cursor do mouse. Para fazer isso foi necessário utilizar a
função do Sensor de distância, aprendidos na aula 8 e também fazer a conversão de coordenadas polares em
cartesianas utilizadas nos exercícios do Cronômetro e do Polígono regular.
Para o sensor de distância foi necessário duas funções vistas
anteriormente que calculam a distância entre dois pontos(distancia1D), e outra que calcula a distância entre um ponto e a
posição do mouse:
int distancia1D(int
X1, int X2){ //função
para encontrar a distancia entre 2 pontos
int
resposta;
int
aux;
aux = X2 - X1;
resposta = int(sqrt(aux *
aux));
return
resposta;
}
int distanciaO_bola(float
X, float Y){ //função
para encontrar o centro da bola
int
dV = distancia1D(int(Y), mouseY); //distancia
entre Y da bola e o mouse X
int
dH = distancia1D(int(X), mouseX); //distancia
entre o X da bola e o mouse Y
int
d0 = int(sqrt(dV*dV
+ dH*dH)); // distancia entre o centro da bola e o
mouse X e mouse Y
return
d0;
}
E para a conversão de coordenadas polares em cartesianas
utilizarei essa função discutida anteriormente:
float[] polar_cartesiano(float ang, float r){
float[] posL = new float[2];
posL[0] = r*(cos(ang));
posL[1] = r*(sin(ang));
return posL;
}
Para criar o olho, foi necessário saber a distância entre o
centro do olho e o mouse então foi criada a variável d_olho para fazer isso. Outra variável importante é a atg que que irá receber a função atan2(), que transforma as posições x e
y do mouse em angulo, logo depois foi feito um condicional que não deixa a íris
sair do olho:
void Olho1(int x1,int y1){ pos = polar_cartesiano(atg1,r); d_olho = distanciaO_bola(x1,y1); //saber a distância entre o mouse e o centro do olho atg1 = atan2(mouseY-y1,mouseX-x1);//pega o valor, em radiano da posição do mouse fill(230); ellipse(x1,y1,r+75,r+75); fill(0); if (d_olho>r){ ellipse(x1+pos[0],y1+pos[1],r,r); }else{ ellipse(mouseX, mouseY,r,r); } }
Para o programa ficar mais interessante, dupliquei a função
do olho, e coloquei uma imagem de fundo, segue como ficou o código completo:
PImage imgMinion; float tg = 0; float atg1= 0; float atg2= 0; float angulo=0; float[] pos= new float[2]; float r=40; float d_olho; void setup(){ size(766, 534); noStroke(); imgMinion = loadImage("minion.png"); } int distancia1D(int X1, int X2){ //função para encontrar a distancia entre 2 pontos int resposta; int aux; aux = X2 - X1; resposta = int(sqrt(aux * aux)); return resposta; } int distanciaO_bola(float X, float Y){ //função para encontrar o centro da bola int dV = distancia1D(int(Y), mouseY); //distancia entre Y da bola e o mouse X int dH = distancia1D(int(X), mouseX); //distancia entre o X da bola e o mouse Y int d0 = int(sqrt(dV*dV + dH*dH)); // distancia entre o centro da bola e o mouse X e mouse Y return d0; } float[] polar_cartesiano(float ang, float r){ float[] posL = new float[2]; posL[0] = r*(cos(ang)); posL[1] = r*(sin(ang)); return posL; } void Olho1(int x1,int y1){ pos = polar_cartesiano(atg1,r); d_olho = distanciaO_bola(x1,y1); //saber a distância entre o mouse e o centro do olho atg1 = atan2(mouseY-y1,mouseX-x1);//pega o valor, em radiano da posição do mouse fill(230); ellipse(x1,y1,r+75,r+75); fill(0); if (d_olho>r){ ellipse(x1+pos[0],y1+pos[1],r,r); }else{ ellipse(mouseX, mouseY,r,r); } } void Olho2(int x1,int y1){ pos = polar_cartesiano(atg2,r); d_olho = distanciaO_bola(x1,y1); atg2 = atan2(mouseY-y1,mouseX-x1); fill(230); ellipse(x1,y1,r+75,r+75); fill(0); if (d_olho>r){ ellipse(x1+pos[0],y1+pos[1],r,r); }else{ ellipse(mouseX, mouseY,r,r); } }
void draw(){ background(255); image(imgMinion,0,0); Olho1(415,109); Olho2(545,155); angulo=degrees(atg2); //condição para não deiar o angulo negativo(de 0 á 2*PI) if (atg2<0){ atg2= atg2+2*PI; } }Programa feito com processing.js:
Comentários
Postar um comentário