CClab mini project2

Project title: Trisha’s Floating Dream

Link to the project:https://editor.p5js.org/N-A-E-S/sketches/N5_MncvSk

Description: This P5js work is based on the selfie from Trisha, who depicted her dream of everything around her floating and changing color. According to her description, I added some animation to her selfie and produced this work.

Visual Documentation:

Coding:

To achieve the animation of floating, I decided to introduce a variable to count the time. The reason why I didn’t choose frameCount is that this number increases too fast to control the movement, and decreasing the frameset would influence the tracking to the mouse position. Thus I introduced a variable t that increased 0.01 each frame. To limit the movement of all triangles, I decided to times a sin() function or cos() function after the Y axis of triangles.

 noStroke();
  fill(154, 205*cos(t), 155*sin(t));
  triangle(200, 100+15*sin(t), 200, 200+15*sin(t), 350, 100+15*sin(t));
  
  fill(255, 225*cos(t), 75*sin(t));
  triangle(40, 100+15*cos(t), 200, 25+15*cos(t), 100, 150+15*cos(t));
    
  fill(255*sin(t), 50, 175);
  triangle(400, 150-5*sin(t), 300, 50-5*sin(t), 380, 10-5*sin(t));
    
  fill(154, 212, 54);
  triangle(0, 70, 150, 0, 0, 0);
    
  fill(126*cos(t), 235*sin(t), 184*cos(t));
  triangle(0, 100+15*sin(t), 50, 200+15*sin(t), 100, 200+15*sin(t));
  
  fill(126, 270, 184);
  triangle(200, 50+15*cos(t), 260, 10+15*cos(t), 250, 70+15*cos(t));

 with the triangle functions, these triangles will slowly move around within 30 pixels,  acting as if they are floating.

Also, I used the same method to achieve the switching of color

Then I expected to achieve the function of keeping the eyes looking at the mouse, so I used a module function to control the distance, which eventually caused the consent shaking of the eyeballs. At first, I decided to use the map() function to replace but I found it quite funny so I just kept it.

// eyes
  strokeWeight(1)
  fill(0);
  ellipse(140,240,30);
  fill(255);
  ellipse(140+(mouseX-140)%10, 240+(mouseY-240)%10, 10);
  
  strokeWeight(1)
  fill(0);
  ellipse(270,240,30);
  fill(255);
  ellipse(270+(mouseX-270)%10, 240+(mouseY-240)%10, 10);
   

 As for the switching hair color part, I just declare key “s” to be the key that changes the color. Every press would lead to a random color.

Entire Coding:

function setup() {
  createCanvas(400, 400);
  background(255, 234, 124);
  }
let t=0;
let r=70;
let g=100;
let b=255;
  // add your code here!
  function draw() {
  background(255, 234, 124);
  t+=0.01;
  // hair //
  noStroke();
  if(keyIsPressed)
    if(key=='s')
      {
        r=random(255);
        g=random(255);
        b=random(255);
      }
  fill(r,g,b);
  rect(25, 200, 350, 200);
    
  noStroke();
  fill(r,g,b);
  rect(25, 160, 350, 50);
    
  fill(250, 250, 250);
  strokeWeight(1)
  ellipse(200, 200, 300, 350); 
    
  fill(r,g,b);
  arc(width/2, height/2.3, 350, 320, PI, PI*2, CHORD);
  
  arc(50, 90, 400, 250, 0, HALF_PI);
    
  ellipse(266, 130, 180);

// curves
 
    
  noFill()
  strokeWeight(5)
  arc(200, 250, 50, 90, PI*0, PI, CHORD);
  
  // eyes
  strokeWeight(1)
  fill(0);
  ellipse(140,240,30);
  fill(255);
  ellipse(140+(mouseX-140)%10, 240+(mouseY-240)%10, 10);
  
  strokeWeight(1)
  fill(0);
  ellipse(270,240,30);
  fill(255);
  ellipse(270+(mouseX-270)%10, 240+(mouseY-240)%10, 10);
  
    
// curves on the left
  noFill();
  stroke(600);
  strokeWeight(5);
  bezier(0, 250, 0, 100, 100, 0, 200, 0, 0, 0, 100, 0);
    
  noFill();
  strokeWeight(5);
  bezier(0, 100, 0, 100, 50, 0, 100, 0, 0, 0, 100, 0);
    
  noFill();
  strokeWeight(5);
  bezier(0, 40, 0, 15, 30, 0, 40, 0, 0, 0, 50, 0);

// curve on the right   
    
  noFill();
  stroke(600);
  strokeWeight(5);
  bezier(400, 0, 10, 0, 400, 0, 400, 160, 50, 0, 0, 0);
    
  noFill();
  strokeWeight(5);
  bezier(400, 0, 160, 0, 400, 0, 400, 105, 50, 0, 0, 0);
    
  noFill();
  strokeWeight(5);
  bezier(400, 0, 270, 0, 400, 0, 400, 40, 50, 0, 0, 0);
  
  // abstract design  
    
  noStroke();
  fill(154, 205*cos(t), 155*sin(t));
  triangle(200, 100+15*sin(t), 200, 200+15*sin(t), 350, 100+15*sin(t));
  
  fill(255, 225*cos(t), 75*sin(t));
  triangle(40, 100+15*cos(t), 200, 25+15*cos(t), 100, 150+15*cos(t));
    
  fill(255*sin(t), 50, 175);
  triangle(400, 150-5*sin(t), 300, 50-5*sin(t), 380, 10-5*sin(t));
    
  fill(154, 212, 54);
  triangle(0, 70, 150, 0, 0, 0);
    
  fill(126*cos(t), 235*sin(t), 184*cos(t));
  triangle(0, 100+15*sin(t), 50, 200+15*sin(t), 100, 200+15*sin(t));
  
  fill(126, 270, 184);
  triangle(200, 50+15*cos(t), 260, 10+15*cos(t), 250, 70+15*cos(t));
  
// mouth
  noStroke();
  fill(230, 130, 0);
  square(170, 300, 35, 9);
    
// earrings
    
  fill(255, 245, 94);
  ellipse(50, 290, 50, 60);
    
  fill(r,g,b);
  ellipse(50, 290, 20, 40);

  fill(255,245,94);
  ellipse(340, 290, 50, 60);
  
  fill(r,g,b);
  ellipse(340, 290, 20, 40); 
if (keyIsPressed)
  if(key=='s')
    {
      print(key)
    }
//save("sketch.png");
    
} 

 Reflection: The use of maths functions could provide a much easier way to the goal.

Partner comment: The eyeballs moving part is quite funny though the hair changing is a bit too fast.

Leave a Reply

Your email address will not be published. Required fields are marked *