int screen_width = 340; int screen_height = 280; int num_particles = 2000; float[] particles = new float[num_particles*2]; float[] vel = new float[num_particles*2]; float flicker; void setup() { size(340, 280, JAVA2D); strokeWeight(2); smooth(); background(104); fill(100, 100, 100); noStroke(); frameRate(30); flicker = 1; for (int i = 0; i < num_particles*2; i+=2) { particles[i] = random(2, screen_width-2); particles[i+1] = random(2, screen_height-2); } for (int i = 0; i < num_particles*2; i+=2) { vel[i] = random(-1,1)*0.25; vel[i+1] = random(-1,1)*0.25; } } void draw() { background(255); // update velocities for (int i = 0; i < num_particles*2; i+=2) { if (particles[i] + vel[i] > screen_width-2) { vel[i] *= -1;// + random(-10,10)/10; } else if (particles[i] + vel[i] < 2) { vel[i] *= -1;// + random(-10,10)/10; } if (particles[i+1] + vel[i+1] > screen_height-2) { vel[i+1] *= -1;// + random(-10,10)/10; } else if (particles[i+1] + vel[i+1] < 2) { vel[i+1] *= -1;// + random(-10,10)/10; } // gravity //float dz_x = cos(particles[i]/25); //float dz_y = cos(particles[i+1]/25); //vel[i] += dz_x*0.1; //vel[i+1] += dz_y; // friction //vel[i] *= 0.99; //vel[i+1] *= 0.99; if (vel[i] > 4) vel[i] = 4; else if (vel[i] < -4) vel[i] = -4; if (vel[i+1] > 4) vel[i+1] = 4; else if (vel[i+1] < -4) vel[i+1] = -4; } // update positions for (int i = 0; i < num_particles*2; i+=2) { particles[i] += vel[i]; particles[i+1] += vel[i+1]; } // draw for (int i = 0; i < num_particles*2; i+=2) { float z = sin(particles[i]/25) + sin(particles[i+1]/25); float disparity = z*2 + 1; //fill(255,0,0,127); if (flicker > 0) { //fill(255,0,0,127); ellipse(particles[i], particles[i+1], 2, 2); } //fill(47,255,255,127); else { //fill(47,255,255,127); ellipse(particles[i]+disparity, particles[i+1], 2, 2); } //ellipse(random(0,screen_width), random(0,screen_height), 200, 150); //rect(random(0,screen_width),random(0,screen_height),random(0,screen_width),random(0,screen_height)); } if (flicker == 2) { flicker = -2; } flicker++; }