よくある描き方は、マンデルブロー集合自体を黒色で描き、まわりの発散部分を∞に なる速さに応じて色で塗り分ける方法です。すると黒いマンデルブロー集合の周辺に色 鮮やかな光景の図形を描くことができます。この様に描いた図形は、マンデルブロー集 合がもつ自己相似性、つまり至るところの細部が全体図形の小さなコピーになるという フラクタル構造を示します。 フラクタル(fractal)は、70年代にマンデルブロー(B.B.Mandelbrot)により導入 された言葉です。彼の著書 "The Fractal Geometry of Nature"が1983年に出版 されると、広く一般に知られるようになりました。当時と比べると、現在のコンピュー タの性能は遥かに向上しました。高性能になったコンピュータを活かして、この様な自 己相似図形を手軽に愉しみましょう。 以下では、図形の一部をどんどん拡大して行くプログラムを作ります。次の図は、作 成したプログラムの実行の様子を一枚の画像に編集したものです。4倍毎に拡大してい ます。この拡大操作を10回繰り返すと約100万倍の倍率を描くことになります。
マンデルブロー集合は点列が、n → ∞ で有界となる集合です。コンピュータでは無 限大の繰り返し計算なんてできないので、繰り返し計算の上限値を決めて、前ページの 判定条件で上限値まで満たされればマンデルブロー集合と見なします。また途中で発散 となれば、そのときの繰り返し数に対応した色を付け光景を描きます。 次の関数は、繰り返しの上限値 NMAX まで計算し、マンデルブロー集合の点では 0 を返し、発散するときは繰り返し数を返します。
int mandelbrot(double a, double b) { double x = 0.0, y = 0.0, x1, y1; for(int n=1; n < NMAX; n++){ x1 = x * x - y * y -a; y1= 2.0 * x * y - b; if( x1*x1 + y1*y1 > 4.0 ) return n; // 発散 x=x1; y=y1; // 点列の更新 } return 0; } |
中心座標(a0, b0)と区間幅vsの初期値を設定 グラフィックスの初期化 do{ 画面消去 座標(a0, b0)を中心に区間±vsの正方形領域に グラフィックス・ウィンドウを設定する for( a0 - vs <= a <= a0 + vs の区間){ 各a(λの実数部)に対して for( b0 - vs <= b <= b0 + vs の区間){ 各b(λの虚数部)に対して int n = mandelbrot(a,b); if( n ) 位置(a,b)にn番の色で点を打つ; } } vs /= factor; // 区間幅を縮小 }while(g.wmouse(a0,b0) != 1);// 右ボタンが押されるまで グラフィックスの終了処理 } |
実行ファイルとソースファイルのダウンロードはこちらです、
マンデルブロー集合
実行ファイルとソース・ファイル Windows 95/ 98上で動作します。 |
mandelbt.lzh (26KB) |
* このソフトウェアは、SYMANTEC. NORTON AntiVirus 5.0 でウィルス検査を 行っています。 * ファイルは吉崎栄泰氏による LHA (Copyright(c)1988-92 H.Yoshizaki)を 使って圧縮しています。
Copyright(c) 2000 Yamada,K