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の数によって始点が異なるところが、前と違うところでもある(そろえようと思えばできるけど)。