Squeak Smalltalk でマンデルブロ集合 番外編(Squeak Etoys 毛玉版)

Squeak Etoys に組み込みの id:squeakerさんの毛玉(Kedama)を使って書いてみました。基本的に その3 などでやっているように実部と虚部に分けて計算する実装の移植です。毛玉は、端的に言うと LOGO の後継の StarLogo の流れを汲む並行処理版タートルグラフィックスシステムで、複数のタートルを同時に動かすことができるようになっています。

毛玉では複数のブリード(タートルの種類)を使いわけてグループごとに振る舞いを変えることができますが、今回は1種類 Breed1 しか使っていないのでこれはすなわちタートル(の振る舞い)そのものと考えて大丈夫です。

タートルというとその軌跡でグラフィックを描くイメージですが、ここでのタートルはあらかじめ 100×100 = 10000マスあるパッチ変数(セルのようなもの)に1匹ずつ割り当てておきそこからは動きません。では何をしているかというと、各々の複素平面内での位置(cre、cim)から z ^ 2 + c を繰り返し計算し、発散しない限りパッチ変数の数を減じてゆくよう振る舞わせています。発散したと判断されたときのパッチ変数の値がそのままグレイの点として描画に反映されます(早く発散してしまえば白のまま、発散しなければ黒に近づく)。

なお、Squeak EToys の四則演算は Smalltalk と同じく乗除優先がないのに加え、Smalltalk(ただし -76 以降)とは逆の右結合という特殊な振る舞いをするので注意が必要です。正しい演算結果を得るにはちょっとした工夫が必要になります。


毛玉についてはこちらの文書が一番詳しく書かれていると思います。

http://squab.no-ip.com/collab/uploads/mandelbrot08.png