Archive for the ‘algorithm’ Category

[processing] 樹木曲線

最近はProcessingの勉強ばっかりです。
Matrixやtranslateの勉強になりそうだったので下の画像のような樹木曲線を描画する勉強。
tree
http://www.openprocessing.org/ にあったやつを参考。
ただどこのページだったか忘れたのでリンクはトップページです。

ものすごいシンプルなソースで作られていてすごい! 
勉強になる。

実際のソースは、ほぼほぼ参考にしたやつからとりあえずいらない部分(マウスでの回転とか)を抜いたやつなので
全体は元の参考サイトを参考に。

一部分のソース抜粋

void start(int d)
{
  pushMatrix();
  rotateX(radians(angle));
  rotateZ(radians(angle));
  drawTree(d);
  popMatrix();
}

void drawTree(int d)
{
  scale(0.8);  
  int len = 50;
  translate(0,-len);
  line(0,len,0,0);
  if(d > 0) start(d - 1);
} 



pushMatrix();
で現状の状態の保存して

rotateX(radians(angle));
rotateZ(radians(angle));

で座標の回転をしてあげて

drawTree();
で線の描画

popMatrix();
で座標の回転をする前に戻す感じみたいです。

drawTree(); の中では
translate(0,-len);
で座標を任意の数値マイナス方向に上げて、
line(0,len,0,0);
で線の描画。


例).
たとえば、元の基準の座標が(0,0)だったときに
len=50だとして

translate(0,-len);
で 基準の座標が(0,-50)になる。
そこから line(0,len,0,0); で線を引く。

2回目は(0,-50)の状態から
translate(0,-len);
をするので 基準の座標が(0,-100)になる。
(0,-100)の状態から line(0,len,0,0); で線を引くので結果的に-50上にずれる。

これの繰り返し。
これをくりかえしえていけば樹木曲線のようなフラクタル図形を描画できるっぽいですね。
他のフラクタル図形も書けそうな感じです。たぶん。わかんないですけど。

Processingはas3.0よりも直感的に書けるきがする。
楽しい。

参考:http://www.openprocessing.org/