ArrayList<Triangle> triangles;
void setup(){
size(500, 500);
stroke(255);
strokeWeight(1);
noFill();
triangles = new ArrayList<Triangle>();
Triangle root = new Triangle();
triangles.add(root);
for(int i = 0; i < 20; i++){
Triangle tri = triangles.get(triangles.size() - 1);
triangles.add(tri.makeChild());
}
}
void draw(){
background(0);
translate(width / 2, height / 2);
for(Triangle tri: triangles){
tri.display();
}
for(Triangle tri: triangles){
tri.update();
}
if(triangles.get(0).radious > 1000){
triangles.remove(0);
triangles.add(triangles.get(triangles.size() - 1).makeChild());
}
}
class Triangle {
float radious;
boolean isUp;
Triangle(){
radious = 1000;
isUp = true;
}
Triangle(float radious, boolean isUp){
this.radious = radious;
this.isUp = isUp;
}
Triangle makeChild(){
return new Triangle(radious / 2, !isUp);
}
void update(){
radious += radious / 40;
}
void display(){
beginShape();
for(int i = 0; i < 3; i++){
float ang = i * (TWO_PI / 3.0);
ang += isUp ? -HALF_PI: HALF_PI;
vertex(radious * cos(ang), radious * sin(ang));
}
endShape(CLOSE);
}
}