Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

延々と現れる三角形

/**
* Endless Triangles
*
* @author aa_debdeb
* @date 2016/03/24
*/

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);
  }
  
  
}