# Kevin Thies – Variable Face

``````//Kevin Thies
//Section C
//kthies@andrew.cmu.edu
//Project-02

// Core Variables
var noseHeight = headHeight * 2.5; // relates proportion of head to  nose
var noseAngle = -4;

var skinR = 221; // color values for skin and background
var skinG = 203;
var skinB = 161;

var backR = 25; // background color offset from skin color values
var backG = 25; // additionally used to offset eye color
var backB = 25; // so the colors all harmonize

var eyeOffset = 50; // setback from head width
var eyeWidth = headWidth/2 - eyeOffset; // eye position
var eyeTop = 3;
var eyeBottom = 3.5;
var pupilRatio = .8; // ratio of eye white to black
var irisRatio = 1.4; // ratio of eye black to color

function setup() {
createCanvas(480,640);
}

function draw() {

// Background that
background(skinR + backR, skinG + backG, skinB + backB);

// Nose, sometimes it looks more like a nose and that's ok
noStroke();
fill(skinR, skinG, skinB);
arc(width/2, height/3, headWidth, noseHeight, noseAngle, 0, CHORD);

// Hide the top half of nose generated
fill(skinR + backR, skinG + backG, skinB + backB);
rect(0,0, width, height/3);

fill(skinR, skinG, skinB);

// Nose

// Eyes
// Pupil
fill(0);
arc(width/2 - headWidth/2 + eyeOffset, height/3, eyeWidth,
eyeHeight, eyeTop, eyeBottom, PIE);
// Iris
fill(skinR - backR, skinG - backG, skinB - backB);
arc(width/2 - headWidth/2 + eyeOffset, height/3, eyeWidth * pupilRatio * irisRatio,
eyeHeight * pupilRatio * irisRatio, eyeTop, eyeBottom, PIE);
// White
fill(255);
arc(width/2 - headWidth/2 + eyeOffset, height/3, eyeWidth * pupilRatio,
eyeHeight * pupilRatio, eyeTop, eyeBottom, PIE);

}

function mousePressed() {

noseHeight = headHeight * random(2, 3);
noseAngle = -random(3.66, 4); //radian angle of  arc

//Change eye color and Shape
eyeOffset = random(45, 60);
eyeTop = random(2.61, 3.14); // 5/6 Pi to Pi
eyeBottom = random(3.14, 3.66); //Pi to 7/6 pi
pupilRatio = random(.75, .5);
irisRatio = random(1.2, 1.3);

// Constrain face color to less saturated, darker values
skinR = random(140, 225);
skinG = random(143, 225);
skinB = random(140, 184);

// Reshuffle background color offset
backR = random(-50, 25);
backG = random(-50, 25);
backB = random(-50, 25);
}
``````

There was a lot of math involved in this one. If I could go back in time, I think bezier curves would’ve been a better fit than arcs simply based on the parameters they use. At the same time, since I used arcs, the end product morphed into what it is now instead of more ‘realistic’ shapes.