Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

One Eye Tracks Mouse

/**
* One Eye Tracks Mouse 
*
* @author aa_debdeb 
* @date 2015/09/02
*/

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