import processing.video.*;
Capture video;
int x, y;
Mover [] mover = new Mover [20];
void setup() {
size(640, 480);
video = new Capture(this, width, height);
video.start();
for (int i = 0; i < mover.length; i++) {
mover [i]=new Mover ();
}
}
void draw() {
if (video.available()) {
video.read();
image(video, 0, 0, width, height);
int brightestX = 0; // X-coordinate of the brightest video pixel
int brightestY = 0; // Y-coordinate of the brightest video pixel
float brightestValue = 0; // Brightness of the brightest video pixel
video.loadPixels();
int index = 0;
for (int y = 0; y < video.height; y++) {
for (int x = 0; x < video.width; x++) {
int pixelValue = video.pixels[index];
float pixelBrightness = brightness(pixelValue);
if (pixelBrightness > brightestValue) {
brightestValue = pixelBrightness;
brightestY = y;
brightestX = x;
}
index++;
}
}
for (int j = 0; j < mover.length; j++) {
// Update the position
mover[j].update(brightestX, brightestY);
// Display the Mover
mover[j].display();
}
}
}
// The Nature of Code
// Daniel Shiffman
// http://natureofcode.com
class Mover {
// The Mover tracks position, velocity, and acceleration
PVector position;
PVector velocity;
PVector dir;
// The Mover's maximum speed
float topspeed;
Mover() {
// Start in the center
position = new PVector(random(width),random(height));
velocity = new PVector(0,0);
topspeed = 5;
}
void update(float x, float y) {
// Compute a vector that points from position to mouse
PVector mouse = new PVector(x,y);
PVector dir = PVector.sub(mouse,position);
// Set magnitude of acceleration
dir.setMag(0.3);
// Velocity changes according to acceleration
velocity.add(dir);
// Limit the velocity by topspeed
velocity.limit(topspeed);
// position changes by velocity
position.add(velocity);
}
void display() {
stroke(0);
strokeWeight(2);
//fill(127);
//ellipse(position.x,position.y,48,48);
line (position.x,position.y, position.x+velocity.x,position.y+velocity.y);
}
}