There she is, Processing Sarah and her two moods!

I’m not sure what the second mood is, but maybe a video will make it clearer.
I started working by looking for inspiration, I looked through the old blog posts here, openprocessing.org (which is a great source to look at the works of people from all over the world and different age and skill levels), and youtube.

This research helped me find new tools I could use for the more complex shapes such as the beginShape(), endShape() function. Additionally, thanks to Jana from last(?) year, I found a cursor tracker code that helped a lot in finding the coordinates of certain points on the screen. You can find that code at the end of my work.
Next, I sketched a really rough draft to brainstorm and figure out the geometric shapes and functions needed to create my portrait. I then realized that some elements of the portrait will use the arc function, so I spent some time playing around with it and inserting different values and angles.
I got to coding the static elements of my portrait. I tried my best to make it resemble me somehow and I found that giving it a half-bun would be perfect to mark that resemblance.
Finally, I wanted to add a factor of animation and thought that going for a moving background could be cool. I settled for making something that makes my character look like she’s in a state of hypnosis…? I drew multiple circles in the code and created an “expand” variable that was added with every iteration of the draw function until the circle width and height reached a specific value which corresponds to the screen size (or the previous circle). Then, it restarts from the default width and height. When you hover over the eyes, you get a similar effect which was done using the same logic.
here’s the code!
// color palette:
color bgColor = color(198,197,185);
color skinColor = color(239,211,187);
color noseColor = color(220,190,200);
color blushColor = color(193,112,122,30);
color lipColor = color(193,112,112);
color frecklesColor = color(184,150,133);
color hairColor = color(80,71,70);
color firstBlue = color(84,106,123);
color secondBlue = color(98,146,158);
color thirdBlue = color(224,234,236);
color irisColor = color(52,42,25);
//declaring variables
int x;
int y;
int ellipse1WH;
int ellipse2WH;
int ellipse3WH;
int ellipse4WH;
int ellipse5WH;
int iris1WH;
int expand = 3;
int irisExpand = 1;
void setup(){
size(500,500);
x = width/ 2;
y = height / 2;
ellipse1WH = 100;
ellipse2WH = 80;
ellipse3WH = 60;
ellipse4WH = 40;
ellipse5WH = 20;
iris1WH = 6;
}
void draw(){
//moving bg
background(bgColor);
stroke(firstBlue);
strokeWeight(60);
noFill();
//drawing the circles
ellipse(x,y,ellipse1WH,ellipse1WH);
stroke(secondBlue);
ellipse(x,y,ellipse2WH,ellipse2WH);
stroke(145,179,187);
ellipse(x,y,ellipse3WH, ellipse3WH);
stroke(192,212,216);
ellipse(x,y,ellipse4WH,ellipse4WH);
stroke(thirdBlue);
strokeWeight(40);
ellipse(x,y,ellipse5WH,ellipse5WH);
//circles expanding
ellipse1WH = ellipse1WH + expand;
ellipse2WH = ellipse2WH + expand;
ellipse3WH = ellipse3WH + expand;
ellipse4WH = ellipse4WH + expand;
ellipse5WH = ellipse5WH + expand;
//upper limit
if (ellipse1WH > 500 ){
ellipse1WH = 100;
}
if (ellipse2WH > 480 ){
ellipse2WH = 80;
}
if (ellipse3WH > 460 ){
ellipse3WH = 60;
}
if (ellipse4WH > 440 ){
ellipse4WH = 40;
}
if (ellipse5WH > 420 ){
ellipse5WH = 20;
}
//hair1, behind the face
noStroke();
fill(hairColor);
//right side
beginShape();
vertex(286,82);
vertex(395,166);
vertex(395,450);
vertex(360,450);
vertex(269,96);
endShape();
rect(108,356,287,100,10);
beginShape();
vertex(217,82);
vertex(108,166);
vertex(108,450);
vertex(143,450);
vertex(269,96);
endShape();
//face
fill(skinColor);
noStroke();
ellipse(x,y,250, 300);
//neck
rect(208,380,90,100,7);
//torso
triangle(0,500,271,424,271,500);
triangle(500,500,271,424,271,500);
//eyebrows
strokeWeight(5);
stroke(0);
line(180,190,215,185);
line(282,185,317,190);
//eyes
arc(197,213,35,13,0, PI); //left
arc(295,211,35,13,0,PI); // right
//eyelashes
strokeWeight(1);
//left eye
line(179,215,174,219);
line(186,219,183,224);
line(195,218,195,225);
line(203,218,207,225);
line(213,216,219,220);
//right eye
line(279,215,274,219);
line(286,219,283,222);
line(295,218,295,223);
line(303,218,307,223);
line(310,212,318,219);
//eye animation
if (mouseX >= 176 && mouseX <= 215 && mouseY >= 208 && mouseY <= 222 || mouseX >= 276 && mouseX <= 313 && mouseY >= 208 && mouseY <= 222 ){
//covers closed eyes
stroke(skinColor);
fill(skinColor);
ellipse(195,213,55,30);
ellipse(295,211,55,30);
//open eyes
fill(255);
ellipse(195,217,50,50);
ellipse(295,215,50,50);
stroke(irisColor);
strokeWeight(15);
ellipse(195,217,iris1WH,iris1WH);
ellipse(295,215,iris1WH,iris1WH);
noStroke();
fill(0);
ellipse(195,217,15, 15);
ellipse(295,215,15,15);
//eye expanding
iris1WH = iris1WH + irisExpand;
if (iris1WH > 45) {
iris1WH = 6;
}
}
////nose
noFill();
stroke(0);
strokeWeight(2.5);
beginShape();
vertex(255,256);
vertex(255,276);
vertex(240,283);
endShape();
//cheeks/blush
//left
noStroke();
fill(blushColor);
ellipse(178,270,40,40);
//right
ellipse(323,270,40,40);
//freckles
fill(frecklesColor);
//left
ellipse(178,260,3,3);
ellipse(169,273,3,3);
ellipse(187,273,3,3);
//right
ellipse(323,260,3,3);
ellipse(314,273,3,3);
ellipse(332,273,3,3);
//mouth
stroke(lipColor);
strokeWeight(5);
noFill();
arc(250,330,80,30,0,PI);
//hair2, bangs
noStroke();
fill(hairColor);
//left
beginShape();
vertex(253,101);
vertex(243,169);
vertex(129,224);
vertex(132,202);
vertex(228,100);
endShape();
beginShape();
vertex(224,102);
vertex(161,127);
vertex(116,200);
vertex(113,221);
vertex(230,113);
endShape();
//right
beginShape();
vertex(253,101);
vertex(267,169);
vertex(368,223);
vertex(371,202);
vertex(280,100);
endShape();
beginShape();
vertex(284,104);
vertex(352,137);
vertex(387,183);
vertex(387,222);
vertex(364,222);
vertex(277,128);
vertex(286,94);
endShape(CLOSE);
//bun
ellipse(253,68,75,75);
//cursor tracker from Jana
print(mouseX);
print(" ");
println(mouseY);
}

