Project 1 Jonathan Perez

sketch

function setup() {
    createCanvas(600, 600);
    background(164, 230, 239);

//background texture
    //corner squares
    stroke(255);
    fill(164, 230, 239);
    rect(0, 0, 120, 120);
    rect(width - 120, 0, 120, 120);
    rect(width - 120, height - 120, 120, 120);
    rect(0, height - 120, 120, 120);

    //grid around head
    rect(width/2 - 120, height/2 - 120, 240, 240);
    line(0, height/2 - 120, 600, height/2 - 120);
    line(0, height/2 + 120, 600, height/2 + 120);
    line(width/2 - 120, 0, width/2 - 120, 600);
    line(width/2 + 120, 0, width/2 + 120, 600);

    //Triangle strips
    beginShape(TRIANGLE_STRIP); //upper
    vertex(width/2 - 120, 0);
    vertex(width/2 - 100, height/2 - 120);
    vertex(width/2 - 80, 0);
    vertex(width/2 - 60, height/2 - 120);
    vertex(width/2 - 40, 0);
    vertex(width/2 - 20, height/2 - 120);
    vertex(width/2, 0);
    vertex(width/2 + 20, height/2 - 120);
    vertex(width/2 + 40, 0);
    vertex(width/2 + 60, height/2 - 120);
    vertex(width/2 + 80, 0);
    vertex(width/2 + 100, height/2 - 120);
    vertex(width/2 + 120, 0);
    endShape();

    beginShape(TRIANGLE_STRIP); //right
    vertex(600, height/2 - 120);
    vertex(width/2 + 120, height/2 - 100);
    vertex(600, height/2 - 80);
    vertex(width/2 + 120, height/2 - 60);
    vertex(600, height/2 - 40);
    vertex(width/2 + 120, height/2 - 20);
    vertex(600, height/2 - 0);
    vertex(width/2 + 120, height/2 + 20);
    vertex(600, height/2 + 40);
    vertex(width/2 + 120, height/2 + 60);
    vertex(600, height/2 + 80);
    vertex(width/2 + 120, height/2 + 100);
    vertex(600, height/2 + 120);
    endShape();

    //bottom
    beginShape(TRIANGLE_STRIP);
    vertex(width/2 - 120, 600);
    vertex(width/2 - 100, height/2 + 120);
    vertex(width/2 - 80, 600);
    vertex(width/2 - 60, height/2 + 120);
    vertex(width/2 - 40, 600);
    vertex(width/2 - 20, height/2 + 120);
    vertex(width/2, 600);
    vertex(width/2 + 20, height/2 + 120);
    vertex(width/2 + 40, 600);
    vertex(width/2 + 60, height/2 + 120);
    vertex(width/2 + 80, 600);
    vertex(width/2 + 100, height/2 + 120);
    vertex(width/2 + 120, 600);
    endShape();

    beginShape(TRIANGLE_STRIP); //left
    vertex(0, height/2 - 120);
    vertex(width/2 -120, height/2 - 100);
    vertex(0, height/2 - 80);
    vertex(width/2 -120, height/2 - 60);
    vertex(0, height/2 - 40);
    vertex(width/2 -120, height/2 - 20);
    vertex(0, height/2 - 0);
    vertex(width/2 -120, height/2 + 20);
    vertex(0, height/2 + 40);
    vertex(width/2 -120, height/2 + 60);
    vertex(0, height/2 + 80);
    vertex(width/2 -120, height/2 + 100);
    vertex(0, height/2 + 120);
    endShape();


    //triangles
    /*stroke(255);
    fill(164, 230, 239);
    beginShape(TRIANGLE_STRIP);
    vertex(0, 0);
    vertex(100, 100);
    vertex(200, 0);
    vertex(300, 300);
    vertex(400, 0);
    vertex(500, 500);
    vertex(600, 0);
    vertex(600, 600);
    endShape();*/

    //beginShape() // square around head
}

function draw() {
    
    //hair section (underneath head graphic)
    stroke(0)
    fill(210);
    quad(297, 280, 377, 280, 357, 350, 307, 385); // hair grey section
    fill(0);
    rect(232, 206, 10, 20);

    //head
    stroke(0)
    fill(255, 220, 200);
    ellipse(267, 310, 130, 200);

    //hair (over head graphic)
    noStroke();
     fill(210);
    rect(297, 290, 50, 20); // grey section
    triangle(297, 310, 307, 310, 297, 330); // sideburns
    fill(0);
    quad(237, 205, 367, 220, 417, 295, 287, 290); //top black section

    //face details
    fill(255, 220, 200);
    ellipse(327, 320, 32, 52); //ear
    stroke(0)
    arc(327, 320, 32, 52, 5*PI/4, PI/2); //partial ear outline
    strokeWeight(2);
    line(237, 360, 211, 360); //mouth horizontal
    arc(247, 360, 20, 20, 4*PI/6, 8*PI/6); // mouth side
    fill(0)
    ellipse(random(-3, 3) + 242, random(-3, 3) + 290, 20, 20); //crazy eye
    noStroke()
    fill(254, 118, 145);
    ellipse(267, 330, 30, 30); //cheek blush

//coffee mugs
    //top left
    stroke(0);
    fill(255);
    ellipse(75, 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(75, 60, 30, 30); //cut-out handle
    fill(255);
    rect(30, 30, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(55, 37, 40, 5); //coffee

    //top right
    stroke(0);
    fill(255);
    ellipse(width - 45, 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(width - 45, 60, 30, 30); //cut-out handle
    fill(255);
    rect(width - 90, 30, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(width - 65, 37, 40, 5); //coffee

    //bottom right
    stroke(0);
    fill(255);
    ellipse(width - 45, height - 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(width - 45, height - 60, 30, 30); //cut-out handle
    fill(255);
    rect(width - 90, height - 90, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(width - 65, height - 83, 40, 5); //coffee

    //bottom left
    stroke(0);
    fill(255);
    ellipse(75, height - 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(75, height - 60, 30, 30); //cut-out handle
    fill(255);
    rect(30, height - 90, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(55, height - 83, 40, 5); //coffee



}

I have to say, creating this self portrait was so much fun. With my limited knowledge of p5js, I was forced to experiment with a totally different art style than I am accustomed to. Despite this literally being constricting, I found it freeing.

I wanted to do something particular to coding – something I couldn’t do with normal pencil in paper – so I centered my piece around the vibrating eye. Coincidentally, the vibrating eye linked quite well to one of my life passions: coffee.

I think I’ll call this “Portrait of the Coffee as a Young Man”.

Leave a Reply