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

Postagens mais visitadas deste blog

Exercício 6 - Bandeira do Brasil

Exercício 10 - Jogo do Pong

Execício 8 - Sensor de distância