フラクタルのシダ(作品)

12月 8th, 2011

Processing Advent Calendar 2011(8日目)

今回はフラクタルで描くシダを作ってみました。

 

参考にしたのはフラクタルのシダ(Wikipedia)です。

アプレットはこちら

何もしないと中央の茎しか描かれないのですが、ランダムに左右に分かていくことで、シダの葉が形成されていきます。
ソースを見ると分かる通り、Wikipediaに掲載されている数式をそのまま利用しております。

float x = 0;
float y = 0;
final int RATIO = 59; // シダのサイズ
 
void setup() {
  size(600, 600);
  background(0);
  stroke(255, 255, 128, 255);
}
 
void draw() {
  float sw;
  float tx = 0, ty = 0;  // 仮座標
  int i;
 
  //  100回座標の変換を行う
  for (i = 0; i < 100; i++) {
    tx = 0;
    ty = 0;
 
    point(( x * RATIO) + width / 2 - 50, height - y * RATIO);
    point(0, 0);
 
    sw = random(100);
    if (sw > 15) {
      tx = 0.85 * x + 0.04 * y;
      ty = -0.04 * x + 0.85 * y + 1.6;
    }
    else if (sw > 8) {
      tx = -0.15 * x + 0.28 * y;
      ty = 0.26 * x + 0.24 * y + 0.44;
    }
    else if (sw > 1) {
      tx = 0.2 * x - 0.26 * y;
      ty = 0.23 * x + 0.22 * y + 1.6;
    }
    else {    
      tx = 0;
      ty = y * 0.16;
    }
 
    x = tx;
    y = ty;
  }
}

Tags: , ,
Posted in Processing Advent Calendar2011 | No Comments »

Comments

Leave a Reply

 Comment Form