ドラゴン曲線 (フラクタルの近似)
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)