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;
}
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;
}