Pixel Painting

Created with Elaine

An interactive sketch where circles leave a trail as they move. The movement appears to be affected by the brightness of background images, and the trails have a color transition effect that's controlled by mouse actions.

Code

function draw() {
  
  if (clear) {
    
    background(0, 25); // Fading effect by drawing semi-transparent background
 
  }
 
    for (var i = 0; i < total; i++) {
 
    var circle = circles[i];
    
    circle.angle += 1 / circle.radius * circle.dir;
    
    circle.pos.x += cos(circle.angle) * circle.radius;
    
    circle.pos.y += sin(circle.angle) * circle.radius;

    
    if (brightness(img.get(round(circle.pos.x), round(circle.pos.y))) > 70 ||
    
      circle.pos.x < 0 || circle.pos.x > width ||
    
      circle.pos.y < 0 || circle.pos.y > height) {

      circle.dir *= -1;
   
      circle.radius = random(3, 15);

      circle.angle += PI;
function mousePressed() {
  clear = true; // Start the clearing process
  transitionProgress = 0; // 
}
function mouseMoved() {
  if (clear) {   
    clear = false; // Stop clearing the screen when the mouse moves
    
    imgIndex = (imgIndex + 1) % imgs.length; // Cycle through images
    
img = imgs[imgIndex]; // Load the next image
    
background(0); // Clear the background fully before drawing the next image
 
}

preload() Function
- loadImage(): This function is called for each of the four star images. They are loaded and stored in the imgs array for later use.

setup() Function
- Sets the current img to the first image in the imgs array.
- createCanvas(): Creates a drawing canvas with the dimensions of the img.
- background(): Sets the initial canvas background to black.
- frameRate(): Sets the number of times the draw() function is called per second.
- Initializes the circles array with 500 objects, each with properties for their previous and current positions, direction, radius, and angle.

draw() Function
-
background(): If clear is true, draws a semi-transparent background to create a fading effect.
- Loops over each circle to update its position and draw it
- Updates the circle's angle based on its radius and direction.
- Moves the circle's position in the direction of the angle.
- Checks if the circle is over a bright spot or outside the canvas bounds and inverts its direction if so.
- Grabs the color from the current background image at the circle's position.
- Inverts this color and interpolates between the original and inverted color based on transitionProgress.
- Sets the drawing color to this interpolated color and draws a line from the circle's previous position to its new position.
- Updates the circle's previous position to its current position.
Increments transitionProgress to change the colors over time slowly.

Back to ICM main page

Back to main page
Previous
Previous

Class 06 - Midterm

Next
Next

Sound