ドラゴン曲線 (フラクタルの近似)

LineShow[x_] := Show[Graphics[{Thickness[0.015], Line[x]},PlotRange -> { ... }, {-0.6, 1}}, (2 つのリストはx軸, y軸の範囲) AspectRatio ->Automatic, Axes -> True]] ;
3 つのリストからはじめる


pt3 = {{-1, 0}, {-1/2, -1/2}, {0, 0}} ;

g1 = LineShow[pt3]; 3点を折れ線で結ぶ



u = (0  , 1 ) ; v = (1 , 1 )/2 ;
g2 = LineShow[Reverse[Map[u . # &, pt3]]] ; uとの内積のリストpt3にmapすれば折れ線が回転する       -1   0          -1   1


行列uは点の座標を90°回転する . 行列vは点の座標を時計回りに45°回転する元の折れ線を繋げるためにリストの中の点を逆転する

Show[g1, g2] ; (元の折れ線とともに表示)

下に1へ平行移動して時計回りに45°回転して1/2^(1/2) 倍にすれば元の2つの線が得られる

これらの演算をまとめて次の関数stepとして定義する

step[d_] := Map[v . (# - {0, 1}) &, Join[d, Rest[Reverse[Map[u. # &, d]]]]]

この関数は上の演算で得られる2つのリストを1つにまとめて1組の折れ線となった結果を返す .

次に2つの点のリストを初期値としてstepを使うことができる

ini = {{-1, 0}, {0, 0}} ;

step[ini]

{{-1, 0}, {-1/2, -1/2}, {0, 0}}

pt3が得られる

step[%]

{{-1, 0}, {-1, -1/2}, {-1/2, -1/2}, {-1/2, 0}, {0, 0}}

g3 = LineShow[%] ;

繰り返す

dragon4 = Nest[step, ini, 4] ;
Show[Graphics[Line[dragon4], AspectRatio -> Automatic]] ;


dragon5 = Nest[step, ini, 4] ;
Show[Graphics[Line[dragon5], AspectRatio -> Automatic]] ;


dragon6 = Nest[step, ini, 6] ;
Show[Graphics[Line[dragon6], AspectRatio -> Automatic]] ;


dragon10 = Nest[step, ini, 10] ;
Show[Graphics[Line[dragon10], AspectRatio -> Automatic]] ;


dragon13 = Nest[step, ini, 13] ;
Show[Graphics[Line[dragon13], AspectRatio -> Automatic]] ;


Converted by Mathematica  (February 26, 2004)