Yugyeong Lee Project – 02

sketch

//Yugyeong Lee
//Secton A 9:00 AM
//yugyeonl@andrew.cmu.edu
//proeject-02

var faceWidth = 150;
var faceHeight = 175;
var eyeSize = 15;
var noseWidth = 15;
var noseHeight = 10;
var blushSize = 15
var mouthWidth = 60;
var mouthHeight = 40;
var color = 155;
var hairLength = 175;
var hairangle = 60;
var hairDecorationType = 'ribbon';

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

function draw() {
	//Background
	noStroke();
	fill(249, color, 138);
    rect(0, 0 , width, height / 4);
    rect(0, 320 , width, height / 4);
    fill(249, color, 18);
    rect(0, 160 , width, height / 4);
    rect(0, 480 , width, height / 4);
    fill(255);
    ellipse(width / 2, height / 2 - 15, 300, 300);
    
    //Hair
    noStroke();
    fill(109, 93, 74);
    ellipseMode(CENTER);
    ellipse(240, 285, 200, 200);
    rect(140.5, 215, 199, hairLength, hairangle);

    //Face
    noStroke();
    fill(242, 214, 180);
    ellipseMode(CENTER);
    ellipse(width / 2, height / 2 - 10, faceWidth, faceHeight);

    //Blush
    var blushLX = width / 2 - faceWidth * 0.35
    var blushRX = width / 2 + faceWidth * 0.35
    fill(247, 186, 215);
    ellipse(blushLX, height / 2 + faceHeight * 0.15, blushSize * 1.15, blushSize); 
    ellipse(blushRX, height / 2 + faceHeight * 0.15, blushSize * 1.15, blushSize);

	//Hair (bangs)
	fill(109, 93, 74);
    rect(160, 220, 160, 85, 30);
    fill(242, 214, 180); //Part of Face
    triangle(195, 310, 210, 270, 215, 310);

    //Eyes
    var eyeLX = width / 2 - faceWidth * 0.25;
    var eyeRX = width / 2 + faceWidth * 0.25;
    fill(68, 45, 18);
	ellipse(eyeLX, height / 2 + faceHeight * 0.05,  eyeSize, eyeSize * 1.15);
    ellipse(eyeRX, height / 2 + faceHeight * 0.05,  eyeSize, eyeSize * 1.15);

    //Nose
    var noseX = width / 2
    var noseY = height / 2 + faceHeight * 0.125
    stroke(153, 116, 81);
    strokeWeight(4);
    noFill();
    arc(noseX, noseY, noseWidth, noseHeight, PI, TWO_PI);

	//Mouth
	fill (222, 86, 88);
	noStroke();
	arc(width / 2, height / 2 + faceHeight * .2, mouthWidth, mouthHeight, TWO_PI, PI);

	//Hair Decoration
	hairDecoration();
}

function hairDecoration() {
    if (hairDecorationType == 'ribbon') {
        ribbon();
    }
    else if (hairDecorationType == 'hairBand') {
        hairBand();
    }
}

function ribbon() {
	//Ribbon
	fill(236, 39, 86);
	triangle(290, 255, 260, 240, 260, 270);
	triangle(290, 255, 320, 240, 320, 270);
}

function hairBand() {
	//Hair Band
	stroke(254, color, 22);
	strokeWeight(8)
	noFill();
	arc(width / 2, height / 2, 200, 200, PI+QUARTER_PI, TWO_PI-QUARTER_PI);
}

function mousePressed() {
    color = random(0, 255);
    eyeSize = random(15, 25);
    noseWidth = random(10, 17);
    noseHeight = random(5, 10);
    blushSize = random(10, 20);
    mouthWidth = random(20, 60);
    mouthHeight = random(40, 50);
    hairLength = random(175, 225);
    hairangle = random(50, 100);
    hairDecorationType = random(['ribbon', 'hairBand']);
}

For this project, I focused on creating a bright, colorful mood playing around with different facial expression as well as warmed-toned colors.

LookingOutwards-02

This picture uses algorithms to create a colorful and precise drawing.  What I find amazing about these types of algorithms is that they are completely man made yet similar patterns can be found in nature in snails shells, trees and many other natural objects.  I have no idea how this algorithm was formed but considering what I have learn thus far, it would include a series of repeated functions combined together to form repeated shapes and patterns.  I think that the artist’s representation came out mainly through the colors which flow into each other harmoniously.  What draws me and many other people to art like this is its perfection yet unpredictability.  When I look at this picture I can both admire and be in awe of the mathematical perfection which leave me wondering how mathematicians were able to turn algorithms into art.

mathart

created in 2012
https://ablogappart.wordpress.com/tag/math-art/

Brian Bizier- Project 02- Variable Faces

brian-bizier-project-02-variable-faces

I began this project by creating a digital “sketch” using JavaScript, fine tuning it until I basically liked. I then substituted the values for variables and added the randomization. I don’t know why, but this felt better than last week’s project for me. I hope I formatted this correctly! 😛

Alison Hoffman Looking Outward 2

For this post I looked at the work of Memo Akten. His series on Simple Harmonic Motion immediately stood out to me. His instillation at the Blenheim Palace, Simple Harmonic Motion for Light #11,in particular is rather fascinating. I admire how he uses something as abundant as light to create something so unique and complex. Memo uses a generated a simple harmony to create the movement of the light beams. While the mechanics are simple, the end product is nothing short of complex due to the natural properties of light. The harmonic motion is generated by an algorithm, but the refraction of light due to cloud coverage makes the work unpredictable.Memo used openFrameworks, a C++ ‘toolkit’, to create the algorithm for this piece.

Generative Faces Project-02

I was trying to make the face resemble the style of characters from PowerPuff Girls and FairlyOdd Parents I really like the changing eye colors, which I did by replacing the g value in (r, g, b) with the variable eyeColor.

 

sketch index

//Arula Ratnakar
//Section C
//aratnaka@andrew.cmu.edu
//Generative Faces



var eyeSize = 20;
var faceWidth = 120;
var faceHeight = 150;
var pupil = 20//I said pupil but I meant iris
var mouth = 20
var hairWidth = 200
var hairHeight = 150
eyeColor = 7

function setup() {
    createCanvas(640, 480);
}
 
function draw() {
    background(170, 204, 235);
    noStroke ()
    ellipse (width /2, ((height/2)-20), hairWidth, hairHeight)//adds hair to the face
    fill (184, 151, 123)// colors the face
    ellipse(width / 2, height / 2, faceWidth,  faceHeight);
    fill (0)
    ellipse (width/2, ((height/2)-50), 70, 70)
    var eyeLX = width / 2 - faceWidth * 0.25;
    var eyeRX = width / 2 + faceWidth * 0.25;
    fill (255)
    ellipse(eyeLX, height / 2, eyeSize, eyeSize);
    ellipse(eyeRX, height / 2, eyeSize, eyeSize);
    fill (116,eyeColor, 183)
    ellipse (eyeRX, height /2, pupil, pupil)//adds right iris
    ellipse (eyeLX, height/2, pupil, pupil)//adds left iris
    fill(0)
    ellipse (eyeLX, height/2, pupil/2, pupil/2)//adds left pupil
    ellipse (eyeRX, height/2, pupil/2, pupil/2)//adds right pupil
    ellipse (width/2, 280, 30, mouth);//adds a mouth
   
}
 
function mousePressed() {
    faceWidth = random(100, 200);
    faceHeight = random(100, 160);
    eyeSize = random(20, 30);
    pupil = random (15, 20)
    mouth = random (1, 40)
    hairWidth = random (200, 350)
    eyeColor= random (1, 255)// changes the eyecolor


} 

Alison Hoffman – Project 2

sketch-89.js

//Alison Hoffman
//Section D
//achoffma@andrew.cmu.edu
//Project 2

var head_w1 = 240; // x coordinate of the face, left
var head_w2 = 460; // x coordinate of the face, right
var top_h = 72; // top of the head
var head_h = 60; // head height y coordinate 
var jaw_w1 = 260; // x coordinate of jaw, left
var jaw_w2 = 410; // x coordinate of jaw, right
var jaw_h = 340; // y coordinate of jaw
var bottom_h = 400; // bottom y coordinates
var eye_diam = 25;
var colorR = 140;
var colorG = 30;
var colorB = 230;
var brow_stroke = 6;
var brow_arch = 130;
var lip_stroke = 8;
var bottom_lip_x = width/2
var bottom_lip_y = height/2 + 100



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

function draw() {
	background(0);
	//face shape
    stroke(255);
    strokeWeight(9);
	//top of face
	fill(0);
    beginShape();
    curveVertex(160,180); 
    curveVertex(160,180);
    curveVertex(head_w1,head_h);
    curveVertex(width/2,top_h);
    curveVertex(head_w2,head_h);
    curveVertex(480,180);
    curveVertex(480,180);
    endShape();
    //lower face
    fill(0);
	beginShape();
    curveVertex(160,180);
    curveVertex(160,180);
    curveVertex(170,240);
    curveVertex(200,280);
    curveVertex(jaw_w1,jaw_h);
    curveVertex(width/2, bottom_h);
    curveVertex(jaw_w2,jaw_h);
    curveVertex(420,280)
    curveVertex(460,240);
    curveVertex(480,180);
    curveVertex(480,180);
    endShape();

    //eyes
    stroke(255);
    strokeWeight(12);
    fill(colorR,colorG,colorB);
    //left
    ellipse(250,180,eye_diam);
    //right
    ellipse(380,180,eye_diam);
    //lids
    stroke(colorR,colorG,colorB);
    strokeWeight(brow_stroke);
    noFill();
    //left
    beginShape();
    curveVertex(210,160);
    curveVertex(210,160);
    curveVertex(240,brow_arch);
    curveVertex(280,160);
    curveVertex(280,160);
    endShape();
    //right
    beginShape();
    curveVertex(350,160);
    curveVertex(350,160);
    curveVertex(390,brow_arch);
    curveVertex(430,160);
    curveVertex(430,160);
    endShape();

    //nose
    stroke(255);
    strokeWeight(4);
    beginShape(); 
    curveVertex(width/2,height/2 - 25);
    curveVertex(width/2,height/2 - 25);
    curveVertex(width/2 + 25, height/2+20);
    curveVertex(width/2,height/2 + 30);
    curveVertex(width/2,height/2 + 30);
    endShape();

    //mouth
    stroke(colorR,colorG,colorB);
    strokeWeight(lip_stroke);
    fill(255);
    beginShape();
    curveVertex(260,height/2 + 60);
    curveVertex(260,height/2 + 60);
    curveVertex(bottom_lip_x,bottom_lip_y);
    curveVertex(350, height/2 + 80);
    curveVertex(360, height/2 + 60);
    endShape(CLOSE);
}

function mousePressed() {
    head_w1 = random(180,240); //randomize line curve width 
    head_w2 = random(400,460); //randomize line curve width
    top_h = random(60,72); // face height 
    head_h = random(top_h,71); // randomize line curve height
    jaw_w1 = random(205,260);
    jaw_w2 = random(380,415);
    bottom_h = random(380,400);
    jaw_h = random(285,bottom_h);
    eye_diam = random(25,50);
    brow_arch = random(115,170);
    brow_stroke = random(5,18);
    lip_stroke = random(9,22);
    bottom_lip_x = random(265,385);
    colorR = random(50,230);
    colorG = random(30,240);
    colorB = random(50,255);
    bottom_lip_y = random(height/2+80,height/2+140); 

}

mreyes-Project-02-Variable-Face

mreyes-project-02

//Mercedes Reys

//Section C 

//mreyes@andrew.cmu.edu

//Assignment-01

// size and color variables
var eyeSize = 20;
var puiplilSize = 10

var faceWidth = 75;
var faceHeight = 100;

var noseHeight = 100
var noseWidth = 50

var mouthWidth = 20
var mouthHeight = 20
 
var r = 147
var g = 100
var b = 179 // pastel color pallet

function setup() {
    createCanvas(640, 480);
}
 
function draw() {
    noStroke()
    background(182,242,211);
    // face 
    fill(r,g,b)
    ellipse(width / 2, height / 2, faceWidth,  faceHeight);
    //blush 1 
    var blushX = width / 2 + faceWidth * 0.25 - faceWidth / 2;
    var blushY = height / 2 + faceHeight * 0.25 ; 
    fill(g,b,r) // reverse for complimentary color
    ellipse(blushX + faceWidth / 1.25, blushY, mouthWidth, mouthHeight)
    //eye 1
    ellipse(blushX + faceWidth / 1.25, height / 2, eyeSize, eyeSize)
    fill(50)
    ellipse(blushX + faceWidth / 1.25, height / 2, puiplilSize, puiplilSize)
    //nose 
    fill(r,g,b)
    var noseX = width / 2 + faceWidth * 0.25;
    var noseY = height / 2 + faceHeight * 0.25
    ellipse(noseX, noseY, noseWidth, noseHeight);
    // blush 2 
    fill(g,b,r)
    ellipse(blushX, blushY, mouthWidth, mouthHeight)
    //eye 2
    noStroke()
    var eyeX = width / 2 - faceWidth * 0.25;
    fill(g,b,r) 
    ellipse(eyeX, height / 2, eyeSize, eyeSize);
    fill(50)
    ellipse(eyeX, height / 2, puiplilSize, puiplilSize) // the eyes and blush are sepperate so the nose over laps in a non awkward way
    // nose definition
    noFill()
    strokeWeight(3)
    stroke(100);
    var noseX1 = width / 2 + faceWidth * 0.25 ;
    var noseY1 = height / 2 + faceHeight * 0.40;
    var noseX2 = width / 2 + faceWidth * 0.25 - noseWidth / 2;
    var noseY2 = height / 2 + faceHeight * 0.40;
    var noseX3 = noseX1 - 10
    var noseY3 = noseY1 - 10
    curve(noseX1, noseY1, noseX2, noseY2, noseX3, noseY3, noseX1, noseY1)   
}

function mousePressed() {
  
    mouthWidth = (70,20)
    mouthHeight = (70,20)

    noseHeight = random(150,70)
    noseWidth = random(70,20)

    faceHeight = random(100,200);
    faceWidth = random(75,150);

    puiplilSize = random(5,15)
    
    eyeSize = random(10,30);
    
    r = random (147,255)
    g = random(100,200)
    b = random(179,255)


}

I didn’t do a preliminary sketch for this project and just fiddled around with different shapes. this turned out to be unfruitful as I ended up spending a lot of time on trying to make sure things were not awkward. The arch for the nose was on of the hardest parts as I wanted the ellipse for the nose to change drastically and I had to fiddle with the variables a lot to make sure the curve stayed on the face.

Jess Medenbach – Face Variables

“A manic day”  

//Jessica Medenbach
//Assignment Project 02;Variables Faces 

var noseCurve2=200;

function setup() {
    createCanvas(640, 480);
}
 
function draw() {
    background(17,216,162);
    fill(189,255,108);
    ellipse(width / 2, height / 2, 250,200);
    beginShape();
//mouth
curveVertex(width/2,  height/2);

curveVertex(281,  291);
curveVertex(268,  290);
curveVertex(221,  200);
curveVertex(232, 300);
curveVertex(232, 300);
endShape();
fill(255);

//eyes
var pupil1=10;
var pupil2=10;
var eyewhite1=30;
var eyewhite2=30;
var pupil1=random(10,30);
var pupil2=random(10,30);
var eyewhite1=random(30,50);
var eyewhite2=random(30,50);


ellipse(width/2,height/2, eyewhite1, eyewhite1);
ellipse(width/3+30,height/3+30, eyewhite2, eyewhite2);
fill(0);
ellipse(width/2,height/2, pupil1, pupil1);
ellipse(width/3+30,height/3+30, pupil2, pupil2);

//hat
fill(0);
 rect(300, 90, 30, 50);
 rect(290, 120, 50, 20);

}

function mousePressed() {
    // when the user clicks, these variables are reassigned
    // to random values within specified ranges. For example,
    // 'faceWidth' gets a random value between 75 and 150.
  
}

ntroutma- Project- 02- Variable Face

ntroutma-a02


//Nicholas Troutman
//15.104 section C
//ntroutma@andrew.cmu.edu
//Assignment-02
//16.09009


//formatting
	var varX = 120
	var varY = 80

	var varLoop = 1;

function setup()
{
    createCanvas (640, 480);
    background ("#80B6D1");
}

function draw() 
{

//formatting

	stroke (0);
	strokeWeight (1);


//facial varibles
 	var varFH = random(100, 120); //face height
	var varFW = random(100, 120); //face width
	var varCH = varFH + random(20, 30); // chin length
	var varCW = varFW - random(20, 40); //chin width
	var varNH = random(20, 40); //nose length
	var varNW = random(10, 18); //nose width
	var varMW = random(10, 30); //mouth width
	var varMH1 = random(2, 8); var varMH2 = random(3, 6); var varMH3 = random(2, 8);//mouth height
	var varEW = random(20, 25); //eye width
	var varEH = random(8, 15); //eye height
	var varEC1 = random(50, 250); var varEC2 = random(50, 250); var varEC3 = (50, 250);//eye color
	var varBL1 = random(0, 4); var varBL2 = random(1, 6); var varBL3 = random(0, 8); //left eyebrow
	var varBR1 = random(0, 4); var varBR2 = random(1, 6); var varBR3 = random(0, 8); //right eyebrow


//facial shape
	fill("#FAFCFC");
	//noFill();
	beginShape ();
		curveVertex (varX + .33 * varFW, varY + .1 * varFH);
		curveVertex (varX, varY);
		curveVertex (varX - .33 * varFW, varY + .1 * varFH);
		curveVertex (varX - .48 * varFW, varY + .33 * varFH);
		curveVertex (varX - .5 * varFW, varY + .66 * varFH);
		curveVertex (varX - .5 * varCW, varY + varFH);
		curveVertex (varX, varY + varCH);
		curveVertex (varX + .5 * varCW, varY + varFH);
		curveVertex (varX + .5 * varFW, varY + .66 * varFH);
		curveVertex (varX + .48 * varFW, varY + .33 * varFH);
		curveVertex (varX + .33 * varFW, varY + .1 * varFH);
		curveVertex (varX, varY);
		curveVertex (varX - .33 * varFW, varY + .1 * varFH);
		endShape();

//nose
	noFill();
	beginShape();
		curveVertex (varX, varY + .5 * varFH);
		curveVertex (varX, varY + .5 * varFH);
		curveVertex (varX - .5 * varNW, varY + .5 * varFH + .8 * varNH);
		curveVertex (varX, varY + .5 * varFH + varNH);
		curveVertex (varX + .5 * varNW, varY + .5 * varFH + .8 * varNH);
		curveVertex (varX, varY + .5 * varFH);
		//curveVertex (varX, varY + .5 * varFH);
		endShape();
//mouth
	noFill();
	beginShape();
		curveVertex (varX - .5 * varMW, varY + .85 * varCH - varMH1);
		curveVertex (varX - .5 * varMW, varY + .85 * varCH - varMH1);
		curveVertex (varX, varY + .85 * varCH - varMH2);
		curveVertex (varX + .5 * varMW, varY + .85 * varCH - varMH3);
		curveVertex (varX + .5 * varMW, varY + .85 * varCH - varMH3);
		endShape();

//eyes
	noFill(); 
	beginShape(); //right eye
		curveVertex (varX + .1 * varFW, varY + .45 * varFH + .5 * varEH);
		curveVertex (varX + .1 * varFW, varY + .45 * varFH + .5 * varEH);
		curveVertex (varX + .1 * varFW + .5 * varEW, varY + .45 * varFH);
		curveVertex (varX + .1 * varFW + varEW, varY + .45 * varFH + .5 * varEH);
		curveVertex (varX + .1 * varFW + varEW, varY + .45 * varFH + varEH);
		curveVertex (varX + .1 * varFW + varEW, varY + .45 * varFH + varEH);
		endShape();


	beginShape(); //left eye
		curveVertex (varX - .1 * varFW, varY + .45 * varFH + .5 * varEH);
		curveVertex (varX - .1 * varFW, varY + .45 * varFH + .5 * varEH);
		curveVertex (varX - .1 * varFW - .5 * varEW, varY + .45 * varFH);
		curveVertex (varX - .1 * varFW - varEW, varY + .45 * varFH + .5 * varEH);
		curveVertex (varX - .1 * varFW - varEW, varY + .45 * varFH + varEH);
		curveVertex (varX - .1 * varFW - varEW, varY + .45 * varFH + varEH);
		endShape();

	fill (varEC1, varEC2, varEC3);
	ellipse (varX - .1* varFW - .5 * varEW, varY + .45 * varFH + .5* varEH,
	         .66 * varEH, .66 * varEH); //right iris

	ellipse (varX + .1* varFW + .5 * varEW, varY + .45 * varFH + .5* varEH,
	         .66 * varEH, .66 * varEH); //left iris


//face 1 eyebrows
	noFill();
	beginShape(); //right eyebrow
		curveVertex (varX + .1 * varFW, varY + .4 * varFH - varBR1);
		curveVertex (varX + .1 * varFW, varY + .4 * varFH - varBR1);
		curveVertex (varX + .1 * varFW + .5 * varEW, varY + .4 * varFH - varBR2);
		curveVertex (varX + .1 * varFW + varEW, varY + .4 * varFH - varBR3);
		curveVertex (varX + .1 * varFW + varEW, varY + .4 * varFH - varBR3);
		endShape();

	beginShape(); //left eyebrow
		curveVertex (varX - .1 * varFW, varY + .4 * varFH - varBL1);
		curveVertex (varX - .1 * varFW, varY + .4 * varFH - varBL1);
		curveVertex (varX - .1 * varFW - .5 * varEW, varY + .4 * varFH - varBL2);
		curveVertex (varX - .1 * varFW - varEW, varY + .4 * varFH - varBL3);
		curveVertex (varX - .1 * varFW - varEW, varY + .4 * varFH - varBL3);
		endShape();



//loop function
	if (varLoop < 3) {
		varX = varX + 200;
		varLoop ++; 
		loop();
	}
	else if (varLoop < 4) {
		varX = 120;
		varY = varY + 200;
		varLoop ++;
		loop();
	}
	else if (varLoop > 5, varLoop < 6) {
		varX = varX + 200; 
		varLoop ++;
		loop();
	}
	else {
		noLoop();
	}

	
}


After a few quick image searches of chernoff faces, I found that most of them were very cartooned and perhaps unrealistic in their varied aspects. That’s fine, now I just need to create my own crude cartoon sketches.
I began with the head shape knowing that I needed something other than an ellipse. After some trial and much error I was able to create a crude but not obscene outline using an origin point at the top of the head and relating my variables to it. This allowed me to vary the height and width of the face at multiple points without potential of misalignment.
Facial features were created in the same way, with reference to the origin point. variable domains were tweaked so that there was no possibility of them intersecting or being placed outside the face. *I found it helpful to allow the function to loop during this, so that I could see all possible outcomes of the line.*
I now have a legion of slightly critical chernoff faces.

fullsizerender

fullsizerender-2

mdambruc-Project-02-Variable-Face

project-02-variable-face

//Mairead Dambruch
//mdambruc@andrew.cmu.edu
//Section C
//Project-02-Variable-Face.js

var faceWidth = 300;
var faceHeight = 180;
var mouthWidth = 30;
var eyebrowHeightL = 209;
var tongueHeight = 50;
var pupilcolor = 0

function setup() {
    createCanvas(640, 480);
}
function draw() {
    background(153, 196, 178);
    fill (234, 255, 16);
    rect(width / 4, height / 3, faceWidth,  faceHeight);//face

    fill(255);
    var eyeLX = width / 1.5 - faceWidth * 0.5;
    var eyeRX = width / 3 + faceWidth * 0.5;
    ellipse(eyeLX, height / 2, 50, 50);
    ellipse(eyeRX, height / 2, 50, 50);//eyes

    fill(pupilcolor);
    var pupilsize = 25;
    var pupilLX = eyeLX;//aligned with eyes
    var pupilRX = eyeRX;
    ellipse(pupilLX, height / 2, pupilsize, pupilsize); //left pupil
    ellipse(pupilRX, height/ 2, pupilsize, pupilsize); //right pupil

    fill(234, 142, 142);
    arc(width / 2, (height / 2) + 40, mouthWidth, 30, 0, PI); //mouth

    fill(255, 0, 95);
    arc(width/2, (height / 2)+ 40, 15, tongueHeight, 0, PI); // tongue

    fill(0);
    ellipse(308, 272, 20, 5);
    ellipse(330, 272, 20, 5);//mustache

    fill(0);
    line(258, eyebrowHeightL, 299, eyebrowHeightL);// left eyebrow
    line(345, 212, 387, 212);//right eyebrow

    fill(108, 84, 28);
    beginShape();
    curveVertex(267, 148);
    curveVertex(299, 161);
    curveVertex(374, 160);
    curveVertex(386, 150);
    curveVertex(363, 145);
    curveVertex(355, 116);
    curveVertex(344, 110);
    curveVertex(326, 118);
    curveVertex(317, 110);
    curveVertex(302, 108);
    curveVertex(292, 143);
    curveVertex(272, 146);
    curveVertex(268, 154);
    curveVertex(267, 148);
    endShape();//fedora

}

function mousePressed() {
    mouthWidth = random (10, 70);//changes width of mouth
    eyebrowHeightL = random(190, 212);//changes height of left eyebrow
    tongueHeight = random(10, 100);//changes how long the tongue is
    pupilcolor = random (0, 255);//changes pupil color

}

I call him “Le Provocateur”, because the features that change when clicked make him a bit provocative. In my process I struggled with aligning all of the features and using more efficient shortcuts. However, I’ve gotten a lot more comfortable with the program.