再帰的に関数を呼び出しながら角度や直線の長さを変更していくことで、まるで木のような図形を描くことのできるアルゴリズム。
本で紹介されているアルゴリズム自体も複雑ではなく、一定の割合で枝の長さと継ぎ足される枝との角度を変更している。
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
という別のモジュールも実装したが、これは別途紹介することにする。