rings on sphere
@author
float radious = 200;
ArrayList<Ring> rings;
void setup(){
size(500, 500, P3D);
rings = new ArrayList<Ring>();
noFill();
strokeWeight(5);
stroke(0, 206, 209);
}
void draw(){
background(30);
ArrayList<Ring> nextRings = new ArrayList<Ring>();
translate(width / 2, height / 2, -100);
rotateZ(map(mouseX, 0, width, -PI / 6, PI / 6));
rotateX(map(mouseY, 0, height, -PI / 6, PI / 6));
for(Ring ring: rings){
ring.display();
ring.update();
if(ring.y < radious){
nextRings.add(ring);
}
}
rings = nextRings;
if(frameCount % 10 == 1){
rings.add(new Ring());
}
}
class Ring{
float y;
Ring(){
y = -radious;
}
void display(){
pushMatrix();
translate(0, y, 0);
rotateX(PI / 2);
float r = radious * cos(asin(abs(y / radious)));
ellipse(0, 0, r * 2, r * 2);
popMatrix();
}
void update(){
y += 3.0;
}
}