float centerX;
float centerY;
float outlineDiameter = 250;
float outlineRadious = outlineDiameter / 2.0;
float pupilDiameter = 150;
float pupilRadious = pupilDiameter / 2.0;
void setup(){
size(500, 500);
smooth();
background(255);
frameRate(60);
centerX = width / 2.0;
centerY = height / 2.0;
}
void draw(){
background(255);
drawOutline();
drawPupil();
}
void drawOutline(){
stroke(128);
strokeWeight(2);
noFill();
arc(centerX, centerY, outlineDiameter, outlineDiameter, 0, 2.0*PI);
}
void drawPupil(){
noStroke();
fill(0);
float distance = calculateDistance(centerX, centerY, mouseX, mouseY);
if(distance <= outlineRadious - pupilRadious){
arc(mouseX, mouseY, pupilDiameter, pupilDiameter, 0, 2.0*PI);
} else {
float cos = (mouseX - centerX) / distance;
float sin = (mouseY - centerY) / distance;
float pupilX = centerX + (outlineRadious - pupilRadious) * cos;
float pupilY = centerY + (outlineRadious - pupilRadious) * sin;
arc(pupilX, pupilY, pupilDiameter, pupilDiameter, 0, 2.0*PI);
}
}
float calculateDistance(float x1, float y1, float x2, float y2){
return sqrt(sq(x1 - x2) + sq(y1 - y2));
}