コッホ曲線
またしても寄り道なのです。
コッホ曲線を描画するサブルーチンを作成。
上の画像はこんなコマンドで。
Koch_Curve 120 120 360 120 2 Koch_Curve 360 120 360 360 2 Koch_Curve 360 360 120 360 2 Koch_Curve 120 360 120 120 2
一部微妙にゆがむのは気にしない気にしない。
まあ、これだけです。
以下にソースコード
# コッホ曲線を描画する Koch_Curve: If Args(5) = 0 Then # 再帰の終了 Line Args(1) Args(2) Args(3) Args(4) #ffffff Else # 各頂点を求めて再帰 Local x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 diffx diffy x1 = Args(1) y1 = Args(2) x5 = Args(3) y5 = Args(4) diffx = x5 - x1 diffy = y5 - y1 # 点1から点5までの距離 Local dist = Int( Sqr( diffx * diffx + diffy * diffy ) ) Local dist2 = dist / Sqr(3) # 点1と点5の角度 Local rad If diffx = 0 Then rad = 3.141592 / 2 * IIf(diffy > 0, -1, 1) Elseif diffx > 0 Then rad = Atn( diffy * -1 / diffx ) Else rad = Atn( diffy * -1 / diffx ) + 3.141592 Endif x2 = Int( x1 + dist / 3 * Cos(rad) ) y2 = Int( y1 - dist / 3 * Sin(rad) ) x3 = Int( x1 + dist2 * Cos(rad + 3.141592 / 6) ) y3 = Int( y1 - dist2 * Sin(rad + 3.141592 / 6) ) x4 = Int( x1 + dist / 3 * 2 * Cos(rad) ) y4 = Int( y1 - dist / 3 * 2 * Sin(rad) ) # 再帰呼び出し Koch_Curve x1 y1 x2 y2 (Args(5) - 1) Koch_Curve x2 y2 x3 y3 (Args(5) - 1) Koch_Curve x3 y3 x4 y4 (Args(5) - 1) Koch_Curve x4 y4 x5 y5 (Args(5) - 1) Endif Return