ArrayList<Particle> particles;
PVector center1, center2;
float radious;
void setup(){
size(600, 400);
frameRate(30);
noStroke();
background(0);
center1 = new PVector(200, height / 2);
center2 = new PVector(400, height / 2);
radious = 100;
particles = new ArrayList<Particle>();
for(int i = 0; i < 100; i++){
particles.add(new Particle());
}
}
void draw(){
fill(0, 50);
rect(0, 0, width, height);
fill(255, 100);
for(Particle p: particles){
p.display();
p.update();
}
}
class Particle{
float angle;
float angleSpeedNoise;
float radiousNoise;
Particle(){
angle = random(TWO_PI * 2);
angleSpeedNoise = random(100);
radiousNoise = random(100);
}
void display(){
if(angle < TWO_PI){
float r = radious + map(noise(radiousNoise + frameCount * 0.01), 0, 1, -50, 50);
ellipse(center1.x + r * cos(angle), center1.y + r * sin(angle), 5, 5);
} else {
float r = radious + map(noise(radiousNoise + frameCount * 0.01), 0, 1, 50, -50);
float a = PI - (angle - TWO_PI);
ellipse(center2.x + r * cos(a), center2.y + r * sin(a), 5, 5);
}
}
void update(){
angle += map(noise(angleSpeedNoise + frameCount * 0.01), 0, 1, PI / 128, PI / 32);
if(angle >= 2 * TWO_PI){
angle -= 2 * TWO_PI;
}
}
}