見出し画像

Cinderellaへのいざない:マンデルブロ集合

「複素平面とフラクタル」の第1節です。
マンデルブロ集合はかなり有名でしょう。Web上で検索すればたくさん出てきます。note にもいくつか記事があります。一番詳しいのは次のnoteです。

他にもいくつかあります。note上で「マンデルブロ集合」のキーワードで検索すれば出てきますし,Web全体なら読み切れないほど出てきます。

 さて,タイトルですが,なぜ「Cinderellaへのいざない」がついているのかを説明しましょう。そのために,まず,次のリンク先へ行って見てもらいましょう。

リンク先を開くとつぎの画面になります。

画像2

上下と右側にスライダがあり,右下にボタンが2つあります。ボタンがない場合は再読み込みをしてください。
上と右のスライダで,着目点を動かすことができます。中央の白の+です。「Zoom」のスライダで拡大できます。

画像3

Zoom のスライダの右端まで来たら,「Restart」ボタンをクリックすると,現在の状態から始めて,ふたたびZoom ができます。
なお,Restart ボタンを押したあと,Zoom スライダ上の点が勝手に動くことがあります。その場合は,画面のどこかをクリックしてください。
「深度」のスライダを動かすと図が変わっていきます。より細かくなっていきます。この「深度」とは何か,それは後の節(自己平方フラクタル)で改めて説明します。

 パソコンの性能の向上により,ここまでできるようになっています。Web上でインタラクティブにズームや移動をして探索ができるのです。Web上にマンデルブロ集合の図を出しているページはいくつもありますし,動画になっているものもありますが,このようにインタラクティブに動かせるものはいまのところあまり見当たりませんが,次のWebページはかなりいいと思います。

インタラクティブではありませんが,どんどん拡大できます。先ほどの筆者のページでは残念ながらここまで拡大はできません。その理由も自己平方フラクタルの節で説明します。
次もなかなかです。

前述の通り,マンデルブロ集合を描くだけならどんなプログラミング言語でもよく,Python・Cを用いて作るという本も出ています。

しかし,Cinderella(CindyScript)を使うことには以下のメリットがあります。

(1) 描画が一瞬でできる
 そうでないとインタラクティブに動かすことはできません。Python などで,通常のプログラムを書いていたのでは到底無理です。なぜ一瞬でできるのか,それはCinderella(CindyScript)には,colorplot() という組み込み関数があるからです。Mathematica のDensityplot() と同様の機能を持つものです。
(2) コードが短い
 たとえば,始めに紹介したnote にプログラムコードが載っているので見てください。結構な量ですね。
 これに対し,Cinderellaでは表示するだけなら次の十数行でできてしまいます。

f(pt,N):=(
 c = complex(pt);
 z = 0;
 n = 0;
 repeat(N, k,
   if(|z| <= 2,
      z = z*z + c;
      n = k;
   );
 );
 hue(n/N);
);
colorplot(f(#,50),[-2,-2],[2,2]);

Mathematica でも同様です。実行画面と合わせてスクリーンショットを載せておきましょう。このコードの中の N が繰り返し数(repeat の回数)です。

画像1

 Cinderellaは,幾何の作図ソフトですが,CindyScriptというプログラミング言語が付随しています。Mathmatica ライクな言語で,関数型です。作図機能で作図した幾何要素(点や線)をコントロールすることができ,図形の設定を行う手間が省けるのもおおきなメリットです。このメリットを生かしたのが,KeTCindy で,Cinderellaを使って TeXの挿入図のソースを作ることができます。Tikz よりずっと簡単に図が描けます。
 Cinderellaから発展したのがCindyJSです。JS は JavaScript。Cinderella は Javaで書かれており,当初は Javaアプレットを使ってWeb上に描画をしていました。WebでJavaアプレットが使えなくなり,かわりに開発されているのがCindyJSです。
 実は,先ほどのリンク先で動いているものは,Cinderella上でCindyScriptを使って書き,それをHTMLに書き出してCindyJSで動かしているのですが,Cinderella上で動かすより Web 上でCindyJSを使って動かす方が高速なのです。リンク先のものも,プログラムを書いたCinderella上だと深度を深くしたときにすこしもたもたします(スライダの反応が遅くなる)

 いかがでしょうか。マンデルブロ集合と似たものにジュリア集合がありますが,やはり一瞬で表示されます。先ほどのリンク先のもの(筆者のマンデルブロ集合)は,インタラクティブに動かすためにスライダを作ったりしていますが,それでもコードの行数は40行程度です。スライダはCinderellaの作図機能で作れますのでその分のコードは不要だからです。
 Cinderella は もちろんフリーウェア。ここからダウンロードできます。マニュアルはヘルプメニューからすべて(CindyScriptの分も)読むことができます。また,次のページで,いろいろ説明をしています。

ぜひダウンロードして,マンデルブロ集合を描いてみてください。


→次節:複素数平面と図形

複素数平面とフラクタル:目次 に戻る