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度クリックすると、下図のようにシェルピンスキーのギャスケットが作図されます。