Mod:Coding Challenge #14: Fractal Trees - Recursive
再帰(リカーシブ)関数による樹木の描画。再帰は最初の頃、イメージつかめなかったけど、作った関数Aが関数A自体を所定の条件の中で呼び出すというもの。これだとbranchという関数が実行されて、基準となる原点座標を移動させながら枝分かれするように2つのbranchが実行され、更にそこで2つに枝分かれして、更に・・・という感じ。
メニュー>ファイル>サンプル>“Fractals and L-Systems"のTreeとかがまんまこれっぽいサンプルだったと思う。見たところあと数回は続くっぽいのでこれくらいにしておく。
// setup関数 : 初回1度だけ実行される void setup() { size(960, 540); // ウィンドウサイズを960px,540pxに colorMode(HSB, 360, 100, 100); // HSBでの色指定にする } // draw関数 : setup関数実行後繰り返し実行される void draw() { background(220, 20, 20); stroke(0, 0, 100); translate(width/2, height); branch(100, 12); } void branch(float len, int depth) { float theta = map(mouseX, 0, width, -PI/2, PI/2); float ratio = map(mouseY, 0, height, 0.5, 0.9); strokeWeight(depth); if (depth > 0) { line(0, 0, 0, -len); pushMatrix(); translate(0, -len); rotate(theta); branch(len * ratio, depth-1); popMatrix(); pushMatrix(); translate(0, -len); rotate(-theta); branch(len * ratio, depth-1); popMatrix(); } }