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

Previous
Previous

Class 06 - Midterm

Next
Next

Sound