Ruby練習二.五日目

昨日の続き。コッホ雪片を描く場合に、画像の中心に雪片がこない云々と書いていたけど、あれは考え方が悪かった。先に画像の中心点を求めて、その点を中心にコッホ曲線の端点を回転させていけばよかった。昨日の考え方では、始点を手動で決めてその点がどこへ移動するかを求めていた。ロジックで大きく違うところは、sin, cosに渡す角度かな。今回の場合は、毎回値が変わるけど、前回の場合は毎回同じ値だった。

w = 180    # 画像幅 
h = 180    # 画像高
cx = w / 2 # 画像の中心座標x
cy = h / 2 # 画像の中心座標y
len = 50   # 線分(?)の長さ 
koch = KochCurve.new(w, h)
for n in 3..5
    x1 = len * Math.cos((2 * Math::PI) / n)
    y1 = len * Math.sin((2 * Math::PI) / n)
    n.times {|i|
        x2 = len * Math.cos(((2 * Math::PI) / n) * (i + 2))
        y2 = len * Math.sin(((2 * Math::PI) / n) * (i + 2))
        koch.koch_curve(x1 + cx, y1 + cy, x2 + cx, y2 + cy, 4)
        x1 = x2
        y1 = y2
    }
    koch.save("koch" + n.to_s + ".png")
end

この方法だとnの数によって始点が異なるところが、前と違うところでもある(そろえようと思えばできるけど)。