« 「乱鴉の島」を読んだ。 | トップページ | 「トシバレール」を買った。 »

2010年11月14日 (日)

ドラゴンカーブをExcelで書いてみる。

C言語による最新アルゴリズム事典に載っていた例をExcel VBAで書きなおしてみよう。最終的にできたのはこんな感じ。

Dragon

説明は:「紙テープを同じ向きに何回も折り曲げ、折り目が直角になるように開いてできる曲線」だそうです。

プログラムはこちら。

Option Explicit
Dim jj As Integer

Sub ボタン1_Click()
    Dim order As Integer
    Dim k As Integer, i As Integer, p As Integer, q As Integer, dx As Integer, dy As Integer
    Dim dx1 As Integer, dy1 As Integer
    Dim fold(5000) As Integer
    order = 10
    jj = 1
    Call move(200, 140)
    dx = 0
    dy = 2
    Call draw_rel(3 * dx, 3 * dy)
    p = 0
    For k = 1 To order
        fold(p) = 1
        q = 2 * p
        For i = p To q
            If fold(q - i) = 0 Then
                fold(i) = 1
                dx1 = -dy
                dy1 = dx
               
            Else
                fold(i) = 0
                dx1 = dy
                dy1 = -dx
               
            End If
            Call draw_rel(dx + dx1, dy + dy1)
            Call draw_rel(3 * dx1, 3 * dy1)
            dx = dx1
            dy = dy1
        Next i
        p = q + 1
    Next k

End Sub

Function draw_rel(x As Double, y As Double)
    Dim x1 As Double, y1 As Double
    x1 = Worksheets("Sheet1").Cells(jj - 1, 3)
    y1 = Worksheets("Sheet1").Cells(jj - 1, 4)
   
    Worksheets("Sheet1").Cells(jj, 3) = x + x1
    Worksheets("Sheet1").Cells(jj, 4) = y + y1
    jj = jj + 1
End Function

Function move(x As Double, y As Double)
    Worksheets("Sheet1").Cells(jj, 3) = x
    Worksheets("Sheet1").Cells(jj, 4) = y
    jj = jj + 1
End Function

« 「乱鴉の島」を読んだ。 | トップページ | 「トシバレール」を買った。 »

学問・資格」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/512682/50000697

この記事へのトラックバック一覧です: ドラゴンカーブをExcelで書いてみる。:

« 「乱鴉の島」を読んだ。 | トップページ | 「トシバレール」を買った。 »

最近のコメント

2018年11月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
フォト
無料ブログはココログ