CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

マンデルブロ集合描画

PCのグラフィックでよくある例題、マンデルブロ集合の計算を386ボード上で行ってみました。

マンデルブロ集合は複素数Znが漸化式

イメージ 1

n→∞の極限で無限大に発散しないという条件を満たす複素数 c 全体が作る集合で
以下の関数で複素平面上でc=a+biがマンデルブロ集合に属すか、発散するときはどれくらいのnで
発散するかをチェックします

int mandel_chk(double a,double b)
{
  double x,y,x1,y1;
  int n;
  x=y=0;
    for(n=1;n<NMAX;n++){
      x1=x*x-y*y+a;
      y1=2*x*y-b;
      if((x1*x1+y1*y1)>4) return n;
      x=x1;
      y=y1;
    }
  return 0;
}

結果はメモリ上に溜めておき、指定領域のスキャンが終わったらシリアルでホストに転送し
これをbitmapファイルに変換します。このときnの値によりピクセルに色をつけます。

以下の例は-1≦Re(c)≦2、-1.5≦Im(c)≦1.5の領域でマンデルブロ集合の全体像を
計算した例です。ひょうたん型の特徴的な集合が見られます。

この画像データを得るのにこの386ボードで50分かかりました(256*256dot)

イメージ 2