よくある描き方は、マンデルブロー集合自体を黒色で描き、まわりの発散部分を∞に なる速さに応じて色で塗り分ける方法です。すると黒いマンデルブロー集合の周辺に色 鮮やかな光景の図形を描くことができます。この様に描いた図形は、マンデルブロー集 合がもつ自己相似性、つまり至るところの細部が全体図形の小さなコピーになるという フラクタル構造を示します。 フラクタル(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);// 右ボタンが押されるまで
    グラフィックスの終了処理
} | 
次の図は、約1億倍に拡大したものです。
実行ファイルとソースファイルのダウンロードはこちらです、
| マンデルブロー集合 
 実行ファイルとソース・ファイル Windows 95/ 98上で動作します。  | 
  
 mandelbt.lzh (26KB)  | 
* このソフトウェアは、SYMANTEC. NORTON AntiVirus 5.0 でウィルス検査を 行っています。 * ファイルは吉崎栄泰氏による LHA (Copyright(c)1988-92 H.Yoshizaki)を 使って圧縮しています。
Copyright(c) 2000 Yamada,K