float ORBITAL_RADIOUS = 100;
int SPHERE_NUM = 50;
float SPHERE_RADIOUS = 5;
float SPHERE_RADIAN_SPEED = PI / 32;
ArrayList<Sphere> spheres;
void setup(){
size(500, 500, P3D);
smooth();
frameRate(24);
noStroke();
spheres = new ArrayList<Sphere>();
for(int i = 0; i < SPHERE_NUM; i++){
spheres.add(new Sphere());
}
}
void draw(){
background(255);
fill(150, 150);
pushMatrix();
translate(width/2, height/2, 100);
sphere(50);
popMatrix();
for(int i = 0; i < SPHERE_NUM; i++){
spheres.get(i).draw();
}
for(int i = 0; i < SPHERE_NUM; i++){
spheres.get(i).update();
}
}
class Sphere{
float radian1;
float radian2;
float radianSpeed1;
float radianSpeed2;
Sphere(){
radian1 = random(PI * 2);
radian2 = random(PI * 2);
radianSpeed1 = random(1) < 0.5 ? SPHERE_RADIAN_SPEED : -1.0 * SPHERE_RADIAN_SPEED;
radianSpeed2 = random(1) < 0.5 ? SPHERE_RADIAN_SPEED : -1.0 * SPHERE_RADIAN_SPEED;
}
void draw(){
fill(255, 0, 0);
pushMatrix();
translate(width/2, height/2, 100);
translate(ORBITAL_RADIOUS * sin(radian1) * cos(radian2), ORBITAL_RADIOUS * sin(radian1) * sin(radian2), ORBITAL_RADIOUS * cos(radian1));
sphere(SPHERE_RADIOUS);
popMatrix();
}
void update(){
radian1 += radianSpeed1;
radian2 += radianSpeed2;
if(radian1 < 0){
radian1 += PI * 2;
} else if(radian1 >= PI * 2){
radian1 -= PI * 2;
}
if(radian2 < 0){
radian2 += PI * 2;
} else if(radian2 >= PI * 2){
radian2 -= PI * 2;
}
}
}