樹木曲線をrubyに翻訳した。

アルゴリズム事典より「樹木曲線」をrubyに翻訳してみた。

再帰的に関数を呼び出しながら角度や直線の長さを変更していくことで、まるで木のような図形を描くことのできるアルゴリズム
本で紹介されているアルゴリズム自体も複雑ではなく、一定の割合で枝の長さと継ぎ足される枝との角度を変更している。

rubyに翻訳するのもそれほど難しくない。
線分の長さ調節に三角関数を用いているが、これはMathモジュールを使って解決した。

require "./svgplot"

FACTOR = 0.7
TURN = 0.8

def tree(n, length, angle)
    dx = length * Math.sin(angle)
    dy = length * Math.cos(angle)
    draw_rel dx, dy
    if n > 0
        tree n - 1, length * FACTOR, angle + TURN
        tree n - 1, length * FACTOR, angle - TURN
    end
    move_rel -dx, -dy
end

order = 10
plot_start 400, 350
move 200, 0
tree order, 100, 0
plot_end 0

なお、今回は描画のためにsvgplot.rbという別のモジュールも実装したが、これは別途紹介することにする。