Y.Okamoto@Psy.JWU

マンデルブロー集合

複素数の計算とグラフィックス描画

 

複素数の計算例としてマンデルブロー集合のグラフィックス描画例のプログラムを用意した。このプログラムを実行すると下図のような図形の描画が行われる。

サンプルプログラムのファイルは圧縮ファイルmandelbrot.ZIPとしてまとめた。mandelbrot.ZIPここをクリックしてダウンロードできる。ダウンロードして解凍すると作成されるフォルダmandelbrotにあるプロジェクトファイルmandelbrot.jpxJBuilderで開くと実行することができる。

プログラムでは、複素数の計算を下図のようなクラス型cmplxを用意して行っている。

 

下図のように実部の範囲と虚部の範囲を設定してDrawボタンをクリックすると、その範囲のマンデルブロー集合が調べられてその結果が描画される。

実部、虚部の範囲の読み込みと、それに対応する計算とその結果の描画プログラムは次のリストに示されるようになっている。

 

  public void jButton1_actionPerformed(ActionEvent e) {

        Graphics g = jPanel1.getGraphics();

 

        double minr = Double.parseDouble(jTextFieldMinX.getText());

        double maxr = Double.parseDouble(jTextFieldMaxX.getText());

        double mini = Double.parseDouble(jTextFieldMinY.getText());

        double maxi = Double.parseDouble(jTextFieldMaxY.getText());

        cmplx c, z;

        for (int ix = 0; ix < 500; ix++) {

            for (int iy = 0; iy < 500; iy++) {

                c = new cmplx(minr + (maxr-minr)*ix/499,

                              mini + (maxi-mini)*iy/499);

                z = new cmplx(0.0,0.0);

                int n = 0;

                do {

                    z = z.sqr().add(c);

                    n++;

                } while ((z.abs() <= 2.0) && (n <= 100));

 

                n = (int) (n*n*6.0/10001);

                switch (n) {

                    case 0:   g.setColor(new Color(255,255,255));

                              break;

                    case 1:   g.setColor(new Color(0,255,0));

                              break;

                    case 2:   g.setColor(new Color(0,0,255));

                              break;

                    case 3:   g.setColor(new Color(255,255,0));

                              break;

                    case 4:   g.setColor(new Color(255,0,255));

                              break;

                    case 5:   g.setColor(new Color(0,255,255));

                              break;

                    default:  g.setColor(new Color(0,0,0));

                }

                g.fillRect(ix,499-iy,1,1);

            }

        }

    }

 

マンデルブロー集合とは以下の条件を満たす複素数の集合である。

が発散しないことは、が100を超えるまでの範囲での絶対値が2.0を超えるかどうかで判定している。100までの範囲での絶対値が2.0を超えたときは、そのときのの値(7つの範囲に分類している)に応じてに対応する点に色を付けている。100を超えてもの絶対値が2.0をないときはそのはマンデルブロー集合に属するとして黒で着色している。がマンデルブロー集合に属するならば、である。

 

Up