About Fractal by VBA
フラクタルは、自己相似図形の代名詞として使われることが多いものです。有名なものでは、コッホ曲線やシェルピンスキーのガスケットの他に、マンデルブロ集合やジュリア集合が挙げられるでしょう。ここで詳細を述べることはしませんから、詳しいことを知りたければそれなりの書物を調べてください。
本来なら、こういった図形をコンピュータに表示させるときは、細かいドットで表現するのが当たり前で、しかもそれが正しいやり方だと思います。しかし、表計算ソフトのひとつのセルを 1 ピクセルと見なせば、なんとかできないこともありません。そこで少々強引ではありますが、Excel の VBA でマクロを組んでみました。
- [[ VBA 版マンデルブロ集合 ]](ファイル名 "mandel.xls";サイズ 211KB)
- [[ VBA 版ジュリア集合 ]](ファイル名 "julia.xls";サイズ 50KB)
ここからファイルをダウンロードして、自由に試してください(プラウザ上でファイルを開くことができるかもしれませんが、これはダウンロードして実行することが前提のファイルです)。
ところで Excel では古いバージョンの場合、どう頑張っても縦が 256 列しかないので、表示領域は 256×256 ピクセルで考えています。したがって、表示される図形は目が荒くなってしまいます。しかし、こういった画像もなかなかオツなものだと思います。各セルは列幅・行高とも 10ポイント程度に縮め、シートも 15% の縮小表示にしてあります。このサイズは適宜変えてもらってかまいません。
[[ VBA 版マンデルブロ集合 ]] は、すでに全体像が表示されているので、まず拡大したい部分をマウスをドラッグして選択してください。するとボタンが現れるので、「描画」のボタンを押します。(選択範囲を変えたければ「再設定」ボタンを押して選択をやり直します。)これも描画には少々時間がかかるので注意してください。
[[ VBA 版ジュリア集合 ]] は、最初真っ白な画面が出るだけですが、適当にセルをクリックしてもらえば定数を入力するフォームが現れます。このフォームは一度閉じても、適当にセルをクリックすれば再び現れます。定数の入力場所は 2 か所ですが、いずれも -1.00 から 1.00 程度の数値を入力するのがよいでしょう。描画には少々時間がかかるので注意してください。また、このプログラムでマンデルブロ集合の描画もできます。その場合はコードをいじってもらうことになりますが、「'」を 2 つ消すだけです。
また、どちらもコード中の「色の設定(標準)」を無効にして「色の設定2」を有効にすると、(つまり標準の行の先頭に「'」を付け、設定2の行の「'」を取ると、)色のつき具合のちがうものが鑑賞できます。冒頭で詳細は述べないと書きましたが、このことには触れておきます。
このプログラムは複素平面上の数を、計算によって「収束する点」と「発散する点」に分類しています。したがって、収束と発散の境界をかたちづくる点の集合が関心の的になります。プログラムでは収束する点は「黒」で示してあるので、黒い部分の縁取りがマンデルブロ集合もしくはジュリア集合なのです。本来ならそれで終わりですが、鑑賞のために発散する点を色分けしているに過ぎません。色分けの視点は、発散までに要した計算回数で、標準の設定では 8 で割った余りによって着色しています。そのため、3 回で発散する点と 11 回で発散する点が同じ色で、4 回で発散する点と 84 回で発散する点が同じ色になります。しかし発散回数に目をつければ、3 回で発散する点と 4 回で発散する点のほうが、近い性質を持っていると考えられます。しかも、発散する点の大部分はほんの数回の計算で発散してしまいます。こんな視点で着色したものが 2 番目の規則です。色をつける規則から、こちらのほうがやや地味な模様となります。
ちなみに、この [[ VBA 版マンデルブロ集合 ]] と [[ VBA 版ジュリア集合 ]] は Microsoft Excel 97-2004 以降のバージョンで動作するはずです。また、コードには、チューンアップの余地が山のようにあることは確かです。それは各自の楽しみということで、是非コードを書き換えてください。Mac OS + Excel 2011, 2016 でのみ動作確認をしただけですが、Windows でも動作すると思います。
ただチューンアップをしようにも、Excel for Mac(Macintosh 版 Excel)では多くのバージョンで UserForm 等のデザイン編集ができないようです。そこで、UserForm を MsgBox で代替したファイルも用意しました。UserForm のような細かな設計はできませんが、工夫の楽しみはあると思います。以下のものは、Mac OS + Excel 2016 以降でのみ動作確認をしただけですが、こちらもWindows で動作すると思います。
- [[ VBA 版マンデルブロ集合 for Mac ]](ファイル名 "mandel_Mac.xls";サイズ 188KB)
- [[ VBA 版ジュリア集合 for Mac ]](ファイル名 "julia_Mac.xls";サイズ 55KB)
さて、この先はおまけのようなものですが、同じプログラムでも色をつける順番を変えると、また違った雰囲気で鑑賞することができます。興味があれば鑑賞するとよいでしょう。こちらは動きのあるものに仕上がっていると思います。ただし選択した描画範囲にもよりますが、計算回数が十数回ほどになって初めて色が現れるので気長に見ていてください。
- [[ VBA 版マンデルブロ集合2(増殖鑑賞版) ]](ファイル名 "mandel2.xls";サイズ 192KB)
- [[ VBA 版ジュリア集合2(増殖鑑賞版)]](ファイル名 "julia2.xls";サイズ 53KB)
Excel for Mac で実行するなら、以下の方がよいでしょう。また、Macintosh 上での Excel による描画速度は Windows より劣るようなので、 マクロ中の DoEvents 命令の挿入場所を変えるなどしてください。
- [[ VBA 版マンデルブロ集合2(増殖鑑賞版)for Mac ]](ファイル名 "mandel2_Mac.xls";サイズ 188KB)
- [[ VBA 版ジュリア集合2(増殖鑑賞版)for Mac ]](ファイル名 "julia2_Mac.xls";サイズ 44KB)