hopping particles
@author
float MAX_VEL = 10;
ArrayList<Particle> particles;
void setup(){
size(640, 640);
particles = new ArrayList<Particle>();
for(int i = 0; i < 50; i++){
particles.add(new Particle());
}
}
void draw(){
background(0);
noStroke();
fill(255);
for(Particle p: particles){
p.display();
p.update();
}
}
class Particle {
PVector loc, vel;
Particle(){
loc = new PVector(random(width), random(height));
setVel();
}
void setVel(){
float velSize = random(MAX_VEL / 2, MAX_VEL);
float velAng = random(TWO_PI);
vel = new PVector(velSize * cos(velAng), velSize * sin(velAng));
}
void display(){
pushMatrix();
translate(loc.x, loc.y);
rotate(atan2(vel.y, vel.x));
float ellipseX = map(vel.mag(), 0, MAX_VEL, 15, 30);
float ellipseY = map(vel.mag(), 0, MAX_VEL, 15, 5);
ellipse(0, 0, ellipseX, ellipseY);
popMatrix();
}
void update(){
if(random(1) < 0.02){
setVel();
} else {
vel.mult(0.98);
}
loc.add(vel);
if(loc.x < 0) loc.x += width;
if(loc.x > width) loc.x -= width;
if(loc.y < 0) loc.y += height;
if(loc.y > height) loc.y -= height;
}
}