int num = 200; float r = 10; float[] x = new float[num]; float[] y = new float[num]; float[] vx = new float[num]; float[] vy = new float[num]; float ay = 0.5; float ref = 0.95; void setup() { size(300,300); ellipseMode(RADIUS); background(0); frameRate(30); for( int i = 0 ; i < num ; i++ ) { x[i] = random(r,width-r); y[i] = random(r,height-r); vx[i] = random(-5,5); vy[i] = random(-5,5); } } void draw() { // fade to black noStroke(); fill(0,30); rect(0, 0, width, height); for( int i = 0 ; i < x.length ; i++ ) { stroke(0, 0, 255, 100); fill(0, 255, 255, 100); ellipse(x[i], y[i], r, r); x[i] += vx[i]; y[i] += vy[i]; vy[i] += ay; if( x[i] < r || width - r < x[i] ) { x[i] = max(r,min(width - r, x[i])); vx[i] = -vx[i]; } if( y[i] < r || height - r < y[i] ) { y[i] = max(r,min(height - r, y[i])); vy[i] = -ref * vy[i]; } } }