シェルピンスキーのギャスケット (1次元セルオートマトン:ルール90)
1次元セルオートマトン「ルール30」で示したプログラムのデータ部分を ルール90 のルールに置き換えると、典型的なフラクタル図形であるシェルピンスキーのギャスケットが現れます。
そのルール90を以下に示します。
ある時刻 t+1の中央のセル状態は、時刻 t の 左、中央、右の3つのセルの状態で決定されます。
時刻 t 時刻 t+1
111 → 0
110 → 1
101 → 0
100 → 1
011 → 1
010 → 0
001 → 1
000 → 0
時刻 t の値を並べると 01011010 となり、10進数で 90 となることから、ルール90と呼ばれています。
詳しくは、Wikipedia「セル・オートマトン」をご覧ください。
通常のフラクタル図形を描く方法とは全く別の方法(1次元セルオートマトン)で描けるというのは、不思議です。
プログラムは、1世代を描くごとにスリープさせ、ゆっくりと描画するようにしています。
BackgroundWorkerクラスを使い、ProgressChangedイベントで、描画をしています。
ProgressChangedEventArgsのPercentageプロパティには、通常は、進捗を示す割合を設定しますが、
ここでは、世代を示す整数を設定しています。 世代はBitmapの縦軸に対応します。
ソースコードを Rule30のものと見比べてもらえばわかりますが、CellularAutomatonクラス内のrule変数を初期化するデータ部だけが異なっています。
そのルール90を以下に示します。
ある時刻 t+1の中央のセル状態は、時刻 t の 左、中央、右の3つのセルの状態で決定されます。
時刻 t 時刻 t+1
111 → 0
110 → 1
101 → 0
100 → 1
011 → 1
010 → 0
001 → 1
000 → 0
時刻 t の値を並べると 01011010 となり、10進数で 90 となることから、ルール90と呼ばれています。
詳しくは、Wikipedia「セル・オートマトン」をご覧ください。
通常のフラクタル図形を描く方法とは全く別の方法(1次元セルオートマトン)で描けるというのは、不思議です。
プログラムは、1世代を描くごとにスリープさせ、ゆっくりと描画するようにしています。
BackgroundWorkerクラスを使い、ProgressChangedイベントで、描画をしています。
ProgressChangedEventArgsのPercentageプロパティには、通常は、進捗を示す割合を設定しますが、
ここでは、世代を示す整数を設定しています。 世代はBitmapの縦軸に対応します。
ソースコードを Rule30のものと見比べてもらえばわかりますが、CellularAutomatonクラス内のrule変数を初期化するデータ部だけが異なっています。
■MainPage.xaml.cs
■MainPage.xaml
■MainPage.xaml