About CellFractal by VBA

フラクタルは日本語で「自己相似形」などと呼ばれています。ひとくちにフラクタルと言っても、様々な型や種類があるので、ここに掲げたものだけがフラクタルというわけではありません。ここでは、セルラ・オートマトンでフラクタルが現れそうなものを試していると思ってください。そのため、プログラムは「セル・フラクタル」と呼んでいます。

簡単な説明をします。まず、セルラ・オートマトンとは、あるセルの状態を一定の規則に従わせ、次のセルの状態を決定するものです。言い方が分かりにくいですね。つまり、無限に広い「ますめ」(WINDOWS に付属のゲーム、マインスイーパの盤を想像してもらえばよいでしょう)に、セルの初期状態を(たとえば ON・OFF の 2値で)設定します。そして、規則に従って次のセルの ON・OFF が決まり、それが波状的に影響していくというものです。数学の「パスカルの三角形」を知っているなら、そんなものを想像してもらえばよいかもしれません。

すると、初期状態からなんらかの模様が描きあがります。多くの場合、模様は自己相似形になっています。こういうこは紙とペンで確かめることもできますが、さすがに十数回くり返せばイヤになるものです。表計算ソフトはもともとセルの集合体なので、このシミュレーションにはもってこいだと思います。全くプログラムなしではセル・フラクタルを観察できないので、Excel の VBA でマクロを組んでみました。

ここからファイルをダウンロードして、自由に試してください(プラウザ上でファイルを開くことができるかもしれませんが、これはダウンロードして実行することが前提のファイルです)。

ところで、VBA のコードは極力短く書いてあるので、高速化をはかっていません。それは実際のコードをながめてもらえば分かるでしょう。処理速度が遅いコンピュータでは、表示に少々時間を要するはずです。高速化や別のパターンを試したいときは、是非コードを書き換えてください。ちなみに、この [[ VBA 版セル・フラクタル ]] は Windows、Mac OS 上の Microsoft Excel 2000 以降のバージョンで動作確認をしています。

一応、[[ VBA 版セル・フラクタル ]] の仕様を簡単に述べておきます。

  1. ますは 256×512 の大きさで、始めすべてのますはまっさらな状態になっています。
  2. 各セルは列幅・行高とも 10ポイント程度に縮めてあります。シートも 15% の縮小表示になっています。列幅・行高などは適宜変更してもらってかまいません。
  3. Excel のメニューからマクロ(マクロ名は「cellfrac」)を実行させれば、ワークシートに模様が表示されます。定数 COLORS と DIVISOR の値を増やせば彩色が豊かになります。

特に、初期設定が自由にできるような仕様になっていないので、違うパターンを試したければ、マクロのコードを書き換える必要があります。それには、コード中の「INITIAL SET」や「RULE」の行を適当に変更すればよいでしょう。ちなみに、今の初期設定は以下のようになっています。

  1. INITIAL SET : (1行, 128列) のセルだけが ON(値 1 を与えている)
  2. RULE : 次の行の各セルには、左上・真上・右上の 3つのセルの合計を 2 で割った値が与えられる。また、その値に応じた色で表示する

また、セルラ・オートマトンやフラクタルというわけではありませんが、Excel のワークシート上に数をプロットしてみると、ちょっとした模様を眺めることができます。

まず、あられ数ですが、勝手な数から始めて「偶数なら 2で割り、奇数なら3倍して1を足す」ことを繰り返してできる数の列のことをいいます。いくつから始めようとも、最後は必ず1にたどり着くのです。プログラムは1から256までの数---A列からIV列に対応させている---について、1になるまでに取り得た値を、下に向かってプロットしています。そのため、行番号がそのまま取り得た値を示すことになっています。Excelのメニューからマクロ(マクロ名は「arare」)を実行してください。斜めに走る筋が浮かんでいるのが見られるでしょう。

次の、数直線のロープは妙な題でしょう。それは、こういうことです。例えば、素数を数直線上に打つことはできます。そこで、これをロープに見立ててワークシート上に敷き詰めたと考えてください。敷き詰め方はいろいろ考えられますが、ここでは正方形になるようにしています。Excel のメニューからマクロ(マクロ名は「square」または「spiral」または「zigzag」)を実行すれば、敷き詰め方が理解できると思います。敷き詰め方を変えれば模様も変わるので、これ以外の敷き詰め方は各自の楽しみとしてください。プログラムは、サブルーティンを差し換えれば、いろいろなパターンについて調べられます。いまは、剰余による色分け(GENNUM1)と素数のプロット(GENNUM2)を用意してあるだけです。剰余による色分けは、単に n の剰余を求めるだけですが、これを Int(Sqr(n)) などのいろいろな関数で試してみると面白いでしょう。