Nourhane Sekkat’s Self-portrait

Overview: 

In this project my main inspiration was my background and who I am since it is a self-portrait after all. I started off with the blue sky, radiating sun and moving clouds since I love summer but also because Morocco is always sunny and perfect weather. Then I added a red banner with a green circle in the middle of it as a reference to the moroccan flag in which I put my portrait that I made as similar to me as I could get it.

Highlight:

My favorite part about my portrait is the sun shining and the clouds moving it truly gives it life and dimension.  Using previous knowledge, trigonometry and loops I was able to create an endless sky feeling as the sun rays expand and retract while the clouds are moving effortlessly through the screen.

Sun animation: 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function drawSun(x, y) {
// Sun circle
fill(255, 204, 0); // Yellow color
ellipse(x, y, 40, 40);
// Animated Sun rays
stroke(255, 204, 0); // Yellow color for rays
strokeWeight(2);
let rayLength = 30 + sin(frameCount * 0.1) * 15; // Creates the animation effect
line(x - rayLength, y - rayLength, x - 60, y - 60);
line(x, y - rayLength, x, y - 60);
line(x + rayLength, y - rayLength, x + 60, y - 60);
line(x - rayLength, y, x - 60, y);
line(x + rayLength, y, x + 60, y);
line(x - rayLength, y + rayLength, x - 60, y + 60);
line(x, y + rayLength, x, y + 60);
line(x + rayLength, y + rayLength, x + 60, y + 60);
noStroke(); // Resetting the stroke for other drawings
}
function drawSun(x, y) { // Sun circle fill(255, 204, 0); // Yellow color ellipse(x, y, 40, 40); // Animated Sun rays stroke(255, 204, 0); // Yellow color for rays strokeWeight(2); let rayLength = 30 + sin(frameCount * 0.1) * 15; // Creates the animation effect line(x - rayLength, y - rayLength, x - 60, y - 60); line(x, y - rayLength, x, y - 60); line(x + rayLength, y - rayLength, x + 60, y - 60); line(x - rayLength, y, x - 60, y); line(x + rayLength, y, x + 60, y); line(x - rayLength, y + rayLength, x - 60, y + 60); line(x, y + rayLength, x, y + 60); line(x + rayLength, y + rayLength, x + 60, y + 60); noStroke(); // Resetting the stroke for other drawings }
function drawSun(x, y) {
  // Sun circle
  fill(255, 204, 0); // Yellow color
  ellipse(x, y, 40, 40);

  // Animated Sun rays
  stroke(255, 204, 0); // Yellow color for rays
  strokeWeight(2);

  let rayLength = 30 + sin(frameCount * 0.1) * 15; // Creates the animation effect

  line(x - rayLength, y - rayLength, x - 60, y - 60);
  line(x, y - rayLength, x, y - 60);
  line(x + rayLength, y - rayLength, x + 60, y - 60);
  line(x - rayLength, y, x - 60, y);
  line(x + rayLength, y, x + 60, y);
  line(x - rayLength, y + rayLength, x - 60, y + 60);
  line(x, y + rayLength, x, y + 60);
  line(x + rayLength, y + rayLength, x + 60, y + 60);

  noStroke(); // Resetting the stroke for other drawings
}

Cloud animation: 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Moving clouds
drawCloud(cloud1X, 60); // Cloud on the right of the sun
drawCloud(cloud2X, 100); // Cloud below the sun
drawCloud(cloud3X, 350); // Cloud at the bottom
//Moves the clouds
cloud1X += 1;
cloud2X += 1;
cloud3X += 1;
// Loop the clouds once they move off screen
if (cloud1X > width + 30) {
cloud1X = -60;
}
if (cloud2X > width + 30) {
cloud2X = -60;
}
if (cloud3X > width + 30) {
cloud3X = -60;
}
........
function drawCloud(x, y) {
fill(255);
// Group of ellipses to form a cloud shape
ellipse(x, y, 30, 30);
ellipse(x + 20, y, 30, 30);
ellipse(x - 20, y, 30, 30);
ellipse(x - 20, y, 30, 30);
ellipse(x + 10, y + 15, 30, 30);
ellipse(x - 10, y + 15, 30, 30);
}
// Moving clouds drawCloud(cloud1X, 60); // Cloud on the right of the sun drawCloud(cloud2X, 100); // Cloud below the sun drawCloud(cloud3X, 350); // Cloud at the bottom //Moves the clouds cloud1X += 1; cloud2X += 1; cloud3X += 1; // Loop the clouds once they move off screen if (cloud1X > width + 30) { cloud1X = -60; } if (cloud2X > width + 30) { cloud2X = -60; } if (cloud3X > width + 30) { cloud3X = -60; } ........ function drawCloud(x, y) { fill(255); // Group of ellipses to form a cloud shape ellipse(x, y, 30, 30); ellipse(x + 20, y, 30, 30); ellipse(x - 20, y, 30, 30); ellipse(x - 20, y, 30, 30); ellipse(x + 10, y + 15, 30, 30); ellipse(x - 10, y + 15, 30, 30); }
// Moving clouds
  drawCloud(cloud1X, 60); // Cloud on the right of the sun
  drawCloud(cloud2X, 100); // Cloud below the sun
  drawCloud(cloud3X, 350); // Cloud at the bottom

  //Moves the clouds
  cloud1X += 1;
  cloud2X += 1;
  cloud3X += 1; 

  // Loop the clouds once they move off screen
  if (cloud1X > width + 30) {
    cloud1X = -60;
  }
  if (cloud2X > width + 30) {
    cloud2X = -60;
  }
  if (cloud3X > width + 30) {
    cloud3X = -60;
  }

........
function drawCloud(x, y) {
  fill(255);

  // Group of ellipses to form a cloud shape
  ellipse(x, y, 30, 30);
  ellipse(x + 20, y, 30, 30);
  ellipse(x - 20, y, 30, 30);
  ellipse(x - 20, y, 30, 30);
  ellipse(x + 10, y + 15, 30, 30);
  ellipse(x - 10, y + 15, 30, 30);
}

Reflection and ideas for future work or improvements:

The sketch successfully brings together elements of animation and interactivity, and overall bring out what I wanted to from the beginning a serene day in Morocco and who I am. While the current representation is visually appealing, there are several areas of potential enhancement:

-Day to night: I would love to create an aspect in which based on the time of day the sky and the sun changes color and position or even switches to a moon and the clouds change for stars.

-More similarity to me: I would love to be able to figure out how to add more details to the portrait since I do think it’s not as similar to me as I envisioned especially with the hair and other lack of characteristics that were due to not knowing how to manipulate the shapes in my favor.

Leave a Reply