コッホ曲線

またしても寄り道なのです。

コッホ曲線を描画するサブルーチンを作成。
上の画像はこんなコマンドで。

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