E04 シェルピンスキーのギャスケット
フラクタル曲線であるシェルピンスキーのギャスケットを作図してみます (このページ下部の添付ファイル参照)。
三角形の頂点の生成アルゴリズム (Gas1) の作成
3点のリストを与えると、シェルピンスキーのギャスケットの再帰を1ステップ進めた点のリストを返すコマンドを作成します。
L = { (1,1), (5,1), (2,3) }
A = Element[L,1]
B = Element[L,2]
C = Element[L,3]
D = ~MidPoint[A,B]
E = ~MidPoint[B,C]
F = ~MidPoint[C,A]
L2 = {A,D,F, D,B,E, F,E,C}
新規ツール: L2 = Gas1[L]
ギャスケットの点を生成するツール (Gas2) の作成
3の倍数の個数の点のリストを与えると、シェルピンスキーのギャスケットの再帰を1ステップ進めたリストを返すコマンドを作成します。
L3 = Sequence[Gas1[Take[L, 3i-2, 3i]], i, 1, Length[L]/3]
L4 = Join[L3]
新規ツール: L4 = Gas2[L]
三角形を描画するツール (Gas3) の作成
3の倍数の個数の点のリストを与えると、先頭から3個ずつ用いて三角形を描画するツールを作成します。コマンドが長いため、改行されて表示されていることがあるので注意して下さい。
L5 = Sequence[Polygon[Element[L,3i-2],Element[L,3i-1],Element[L,3i]], i, 1, Length[L]/3]
新規ツール: L5 = Gas3[L]
シェルピンスキーのギャスケットツール (Gasket) の作成
最後に2点を与えると、それを正三角形の底辺の2点として、シェルピンスキーのギャスケットを描画するコマンドを作成します。新規の点 G と H を作成し、
I = Rotate[H, pi/3, G]
M = {G, H, I}
とリストを作り、M に Gas2 を適用します。得られたリストに再び Gas2 を適用し、5回程度繰り返した後、Gas3 を適用すると三角形のリストが得られます。
L6 = Gas2[Gas2[Gas2[Gas2[Gas2[M]]]]]
L7 = Gas3[L6]
新規ツール: L7 = Gasket[G, H]
一度オブジェクトをすべて削除してから Gasket ツールを選択し、グラフィックスビューで2度クリックすると、下図のようにシェルピンスキーのギャスケットが作図されます。