domingo, 17 de maio de 2015

Atividade 16

- Criar um olho (círculo preto pequeno no interior de círculo branco grande) que se encontra sempre voltado para o cursor do mouse.

código:


Essa tarefa não teve muita diferença do que foi visto em sala, em fazer uma linha girar partindo do centro da tela, a diferença é que agora a linha será uma ellipse que precisa estar dentro de outra ellipse, então será necessário utilizar distância entre dois pontos para que a ellipse interna não ultrapasse a ellipse externa.

então são necessárias algumas comparações pra saber que valor a tangente inversa vai receber.
  if (mouseX !=0) {
    dx = mouseX - 400 ;
    dy = mouseY - 300 ;
    tg = dy/dx;
  }

  a = atan(tg);


se a posição do mouse em x for menor que o centro da ellipse, a variável a recebe o valor de PI incrementado de a.
  if (mouseX<400) {
    a += PI;
  }


se a posição do mouse em x e em y for maior que o centro da ellipse e menor que o centro da ellipse em y, a variável recebe o valor de PI*2 incrementando de a.
  if (mouseX>400 && mouseY<300) {
    a += TWO_PI;
  }


depois estabelece-se os valores de X e Y, usando as funções cos e sin.
  X=cos(a)*(raio - 70);
  Y=sin(a)*(raio - 70);


a variável dist, recebe os valores da função distancia, que é a função para achar a distância entre dois pontos. No caso, a distância entre o centro da ellipse maior e do mouse, assim, um novo círculo será sempre criado de acordo com a posição do mouse.
  dist =distancia(400, mouseX, 300, mouseY);
  fill(0);
  if (dist>=(raio-70)) {
    ellipse(400+X, 300+Y, 100, 100);
  } else {
    ellipse(mouseX, mouseY, 100, 100);
  }
}

int distancia(float X1, float X2, float Y1, float Y2) {
  int resposta;
  resposta = (int)sqrt(((X1-X2)*(X1-X2)) + ((Y1-Y2)*(Y1-Y2)));
  return resposta;
}



Resultado:




Nenhum comentário:

Postar um comentário