cycling of balls
@author
color bg;
ArrayList<Spin> spins;
void setup(){
size(500, 500);
initialize();
}
void mousePressed(){
initialize();
}
void initialize(){
spins = new ArrayList<Spin>();
for(int i = 0; i < 10000; i++){
Spin newSpin = new Spin();
boolean isOverlapped = false;
for(Spin spin: spins){
float d = PVector.dist(newSpin.center, spin.center);
if(d < newSpin.radious + spin.radious + newSpin.size / 2 + spin.size / 2){
isOverlapped = true;
break;
}
}
if(!isOverlapped){
spins.add(newSpin);
}
}
noStroke();
fill(random(255), random(255), random(255));
bg = color(random(255), random(255), random(255));
}
void draw(){
background(bg);
for(Spin spin: spins){
spin.display();
spin.update();
}
}
class Spin{
PVector center;
float angle;
float angleSpeed;
float radious;
float size;
Spin(){
center = new PVector(random(width), random(height));
angle += random(TWO_PI);
angleSpeed = random(-PI / 16, PI / 16);
float v = random(1);
radious = map(v, 0, 1, 2, 10);
size = map(v, 0, 1, 15, 50);
}
void display(){
float x = center.x + radious * cos(angle);
float y = center.y + radious * sin(angle);
ellipse(x, y, size, size);
}
void update(){
angle += angleSpeed;
if(angle < 0){
angle += TWO_PI;
}
if(angle >= TWO_PI){
angle -= TWO_PI;
}
}
}