見出し画像

ProcessingによるGenerative art作品#4

長方形の短辺に平行な線を引き2つの長方形にします、その2つの長方形にまた同じことを繰り返すアルゴリズムです。
シンプルなアルゴリズムなのに面白い形ができました。

ひとつひとつの長方形の色を変えたかったのですが、どうやったらいいか思いつかなかったので今回は一旦これで。


コード

void setup() {
  size(750, 600);
  noFill();
  noLoop();
}

void draw() {
  background(250);
  strokeWeight(10);
  rect(25, 25, width-50, height-50);
  divideRect(25, 25, width-50, height-50, 10);
}

//クリックで新しく描画する
void mousePressed() {
  redraw();
}

//スペースキーで保存
void keyPressed() {
  if (key == ' ') {
    saveFrame("####.png");
  }
}

//(x座標, y座標, 幅, 高さ, 再帰回数)
void divideRect(float x, float y, float w, float h, int n) {
  float randw = random(w); 
  float randh = random(h); 
  strokeWeight(n);
  strokeCap(SQUARE);
  if (n>0) {
    n--;
    //幅が高さよりも大きい場合
    if (w>h) {
      line(x+randw, y, x+randw, y+h);    //縦に線を引く
      //再帰
      divideRect(x, y, randw, h, n-1);    //左側の四角形
      divideRect(x+randw, y, w-randw, h, n-1);    //右側の四角形
    }

    //幅が高さよりも小さい場合
    if (w<h) {
      line(x, y+randh, x+w, y+randh);    //横に線を引く
      divideRect(x, y, w, randh, n-1);    //上側の四角形
      divideRect(x, y+randh, w, h-randh, n-1);    //下側の四角形
    }
  }
}

応援してくださる方!いつでもサポート受け付けてます!