E02 ドラゴン曲線

フラクタル曲線であるドラゴン曲線を作図してみます (このページ下部の添付ファイル参照)。

線分を作成するツール (Segs2) の準備

偶数個の点のリストの先頭から2点ずつを結ぶ線分を作図するツール Segs2 を定義します。

L = { (1,1), (2,3) }

L1 = Sequence[Segment[Element[L,2i-1],Element[L,2i]], i, 1, Length[L]/2]

ここで、出力オブジェクト L1、入力オブジェクト L でツール Segs2 を作成します。以下、このような新規ツールの作成を

新規ツール: L1 = Segs2[L]

と書くことにします。

ドラゴン曲線の生成アルゴリズム (Dragon1) の作成

2点のリストを与えると、再帰を1ステップ進めた点のリストを返すコマンドを作成します。

A = Element[L,1]

B = Element[L,2]

C' = Rotate[B, pi/4, A]

C = Dilate[C', 1/sqrt(2), A]

L2 = {A, C, B, C}

新規ツール: L2 = Dragon1[L]

ドラゴン曲線の点を生成するツール (Dragon2) の作成

点のリストを与えると、再帰を1ステップ進めたリストを返すコマンドを作成します。

L3 = Join[Sequence[Dragon1[Take[L,2i-1,2i]], i, 1, Length[L]/2]]

新規ツール: L3 = Dragon2[L]

ドラゴン曲線ツール (DragonCurve) の作成

2点を与えるとドラゴン曲線を描画するコマンドを作成します。新規の点 D と E を作成し、

M = { D, E }

とリストを作り、M に Dragon2 を適用します。得られたリストに再び Dragon2 を適用し、さらに10回程度繰り返した後、Segs2 を適用すると ドラゴン曲線の線分のリストが得られます。ここで、出力オブジェクトをドラゴン曲線の線分のリスト、入力オブジェクト D、E として、ツール DragonCurve を作成します。入力バーで入力するならば、以下のようになります。

L4 = Dragon2[Dragon2[Dragon2[Dragon2[Dragon2[Dragon2[Dragon2[Dragon2[L4]]]]]]]]

L5 = Segs2[L4]

新規ツール: L5 = DragonCurve[D, E]

一度オブジェクトをすべて削除してから DragonCurve ツールを選択し、グラフィックスビューで2度クリックすると、下図のようにドラゴン曲線が作図されます。