1次元セルオートマトン (ルール30)

「ルール30」と呼ばれる1次元セルオートマトンのプログラムです。

ある時刻 t+1の中央のセル状態は、時刻 t の 左、中央、右の3つのセルの状態で決定されます。
そのルールを以下に示します。

時刻 t    時刻 t+1
   111  →    0
   110  →    0
   101  →    0
   100  →    1
   011  →    1
   010  →    1
   001  →    1
   000  →    0

時刻 t の値を並べると 0001110 となり、10進数で 30 となることから、ルール30と呼ばれます。
詳しくは、Wikipedia「セル・オートマトン」をご覧ください。

この模様が、ある種の貝殻の表面にある模様と大変よく似ているというのはとても興味深いですね。

プログラムは、1世代を描くごとにスリープさせ、ゆっくりと描画するようにしています。





BackgroundWorkerクラスを使い、ProgressChangedイベントで、描画をしています。
ProgressChangedEventArgsのPercentageプロパティには、通常は、進捗を示す割合を設定しますが、
ここでは、世代を示す整数を設定しています。 世代はBitmapの縦軸に対応します。


■MainPage.xaml.cs

■MainPage.xaml