I created a self-portrait by coding numerous shapes and lines onto a 600x600 canvas in the creative coding software, p5.js. There are interactive features to the project such as the cursor controlling a dynamic rectangle and talking into the microphone to light up the moon. Link to p5.js. Digital Self
function setup() { let moonColor; let c; let micVar; let mic; let drawSmileyX = 0; let fr = 50; let a; let b; let direction; let yPos = 0; let xPos = 0; let balls =[]; function setup() { createCanvas(600, 600); mic = new p5.AudioIn(); mic.start(); // frameRate(20); // textSize(0); // textAlign(CENTER); // frameRate(fr); // Attempt to refresh at starting FPS // clr = color(255, 0, 0); a = 0 b = width; direction = true; frameRate(50); //Framecount fill('white'); textSize(100); text() for (let j = 0; j<30;j++) { let x = random(0, width); let y = random(0, width); balls[j]= new Ball(x,y); } } function draw() { background(171, 120, 210); console.log("mic level: " + mic.getLevel()); c = color micLevel = mic.getLevel(); micVar = map(mic.getLevel(), 0, 0.1, 0, 245); { for (let j = 0; j<30;j++) { balls[j].display(); balls[j].move(); } } drawMovers(); drawRect(); drawMovement(); drawMoon(moonColor); drawMe(); drawSmiley(); // text(frameCount, width / 1.4, height / 1.1); } function drawRect() { push(); fill(204, 255, 255); rect(mouseX, 1, mouseY, 600); pop(); } function drawMovers() { for (let j = 0; j<30;j++) { balls[j].display(); balls[j].move(); } } class Ball { constructor(xPos, yPos, diameter) { this.xPos = xPos; this.yPos = yPos; this.diameter = diameter; this.t = int(random(360)); this.s = random(50,20); } display() { push(); translate(this.xPos, this.yPos); rotate(this.t); drawSmiley(xPos,yPos, 20); fill(0,0,0); pop(); } move() { this.t = this.t + this.s; } } function drawMovement() { push(); fill(61, 20, 166); a++; if (a > width) { a = 0; direction = !direction; } if (direction === true) { stroke(a); } else { stroke(width - a); } rect(a, 0, a, height / 2); b--; if (b < 0) { b = width; } if (direction == true) { stroke(width - b); } else { stroke(b); } rect(b, height / 2 + 1, b, height); pop(); } function drawMoon() { fill(249, 255, 158, +micVar); strokeWeight(10); stroke(color(236, 242, 149)); circle(295, 295, 500);} function drawMe() {//shoulders c = color(65); fill(c); noStroke(); ellipse(220, 600, 470, 165); endShape(); //shirt collar c = color(195, 149, 130); fill(c); strokeWeight(2); stroke(51); beginShape(); ellipse(220, 550, 270, 70); endShape(); //neck c = color(195, 149, 130); fill(c); strokeWeight(2); stroke(51); beginShape(); rect(149, 200, 140, 350); endShape(); //new head beginShape(); vertex(340, 200); vertex(100, 200); vertex(100, 400); vertex(200, 500); vertex(240, 500); vertex(340, 400); vertex(340, 200); endShape(); //left eye (facing) c = color(0, 0, 0); fill(c); strokeWeight(2); stroke(0); ellipse(163, 300, 60, 45); //right eye (facing) c = color(0, 0, 0); noStroke(); ellipse(270, 300, 60, 45); //top lip c = color(164, 124, 107); fill(c); strokeWeight(2); stroke(51); arc(243, 430, 50, 40, radians(180), radians(0)); arc(192, 430, 50, 40, radians(180), radians(0)); //bottom lip c = color(255, 150, 138); fill(c); strokeWeight(2); stroke(51); arc(218, 430, 101, 60, radians(0), radians(180)); //hair c = color(0,0,0); fill(c); noStroke(); ellipse(100, 180, 110, 125); ellipse(180, 180, 110, 125); ellipse(260, 180, 110, 125); ellipse(335, 180, 110, 125); ellipse(140, 150, 110, 125); ellipse(215, 150, 110, 125); ellipse(290, 150, 110, 125); //left eyebrow (facing) c = color(0, 0, 0); fill(c); strokeWeight(4); noStroke(51); rect(128, 255, 65, 10); rect(238, 255, 65, 10); //nose c = color(141, 106, 91); fill(c); strokeWeight(2); stroke(51); arc(218, 370, 50, 40, radians(180), radians(0)); //left ear (facing) c = color(195, 149, 130); fill(c); strokeWeight(2); stroke(51); arc(99, 340, 70, 70, radians(90), radians(270)); //right ear (facing) c = color(195, 149, 130); fill(c); strokeWeight(2); stroke(51); arc(341, 340, 70, 70, radians(270), radians(90)); //left earring (facing) c = color(204, 255, 255); fill(c); strokeWeight(2); stroke(51); circle(85, 360, 20); //right earring (facing) c = color(204, 255, 255); fill(c); strokeWeight(2); stroke(51); circle(355, 360, 20); //triangles c = color(61, 20, 166); fill(c); //triangle(133, 200, 161, 145, 189, 200); //triangle(252, 200, 277, 145, 306, 200); } function drawSmiley() { //smileyface push(); fill(255, 230, 0); ellipse(482, 335, 170, 170); pop(); //smileyface mouth push(); fill(255, 255, 255); arc(484, 357, 110, 85, radians(0), radians(180)); pop(); //smileyface top outline push(); c = color(255, 255, 255) fill(255, 255, 255); line(539, 357, 429, 357); pop(); //smileyface eyes push(); fill(5, 5, 0); ellipse(448, 320, 37, 37); ellipse(519, 320, 37, 37); pop(); }