Daily Creative Coding

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

延々と現れるカラフルな三角形

/**
* Endless Color Triangles
*
* @author aa_debdeb
* @date 2016/03/25
*/

ArrayList<Triangle> triangles;

void setup(){
  size(500, 500);

  colorMode(HSB, 360, 100, 100);
  
  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(){
  
  translate(width / 2, height / 2);
  rotate(frameCount * 0.03);
  for(Triangle tri: triangles){
    tri.display();
  }  
  for(Triangle tri: triangles){
    tri.update();
  }
  if(triangles.get(0).radious > 1500){
    triangles.remove(0);
    triangles.add(triangles.get(triangles.size() - 1).makeChild());
  }
}

class Triangle {
  
  float radious;
  boolean isUp;
  color c;
  
  
  Triangle(){
    radious = 1500;
    isUp = true;
    c = color(random(360), 100, 100);
  }
  
  Triangle(float radious, boolean isUp){
    this.radious = radious;
    this.isUp = isUp;
    c = color(random(360), 100, 100);
  }
  
  Triangle makeChild(){
    return new Triangle(radious / 2, !isUp);
  }
  
  void update(){
    radious += radious / 40;
  }
  
  void display(){
    fill(c);
    noStroke();
    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);
  }
  
  
}