quinta-feira, 13 de outubro de 2016

Atividade 9 - Diferenciar clique em botões retangulares e circulares.

Diferenciar, com base em exemplos, como se pode detectar
 o clique do mouse sobre botões circulares e retangulares.

O quadrado é bem simples definimos o local do botão e fizemos a função dentrorect() para identificar se o mouse está dentro do botão. É só checar se estar no intervalo de espaço entre os quatro vértices de acordo com sua largura e altura. SE isso for verdade retorna true para o dentro1, quando o dentro1 é verdadeiro ou seja o mouse está dentro da área do botão, tem outro IF para testar se o mouse está pressionado. Caso o mouse esteja dentro da área do botão e pressionado, ele muda de cor. Quando o mouse não está mais pressionado volta a cor normal.

Já o círculo precisamos de um cálculo diferente. Começamos com a mesma lógica, uma função dentroellipse(), temos que identificar o valor do clique até o centro para identificar se ele é igual a menor o raio da elipse. Se for maior que o raio está fora da elipse, se for igual ou menor está dentro. Mas para isso precisamos descobrir o valor dessa distância, que pode ser a hipotenusa de triângulos retângulos. Então deduzimos que os catetos serão, cat1=mouseX-ellipseX e cat2=mouseY-ellipseY; e fazemos o conhecido teorema de Pitágoras.


boolean dentro1=false;
boolean dentro2=false;
int ellipseX=400;
int ellipseY=200;
int raio=50;

void setup ()
{
  size(600,400);
  rect(100,150,100,100);  
  ellipse(ellipseX,ellipseY,2*50,2*50);
}

void draw ()
{
dentrorect();
if (dentro1==true)
 {
 if (mousePressed==true)
   {
     fill (255,25,0);
     rect(100,150,100,100);
   }
   else if (mousePressed==false)
   {
   fill(255);
   rect(100,150,100,100);
   }
 }

dentroellipse();
if (dentro2==true)
{
    if (mousePressed==true)
    {
      fill(25,255,0);
      ellipse(ellipseX,ellipseY,2*50,2*50);
    }
    else if (mousePressed==false)
    {
    fill(255);
    ellipse(ellipseX,ellipseY,2*50,2*50);
    }
    
}


}

void dentrorect () {
  if (mouseX>100 && mouseX<200 && mouseY>150 && mouseY<250)
  dentro1= true;
  else dentro1= false;
}

void dentroellipse () {
  float hp;
  int cat1, cat2;
  cat1=mouseX-ellipseX;
  cat2=mouseY-ellipseY;
  hp= sqrt(cat1*cat1+cat2*cat2);
  
  if (hp<=raio)
  dentro2= true;
  else dentro2= false;
}


Comentários
0 Comentários

Nenhum comentário:

Postar um comentário

recent posts