mandel_proc[edit]

MANDEL_API MSGraph<sWord>* mandel_proc(MSGraph<sWord>* vp)
{
   MSGraph<sWord>* xp = NULL;

   int    Xsize  = 600;      // スクリーンのXサイズ
   double Infnty = 1.0e8;    // 無限大
   double Xmin = -2.5;       // X軸(実数部)の最小値の初期値
   double Xmax = 1.0;        // X軸(実数部)の最大値の初期値
   double Ymin = -1.5;       // Y軸(虚数部)の最小値の初期値
   double Ymax = 1.5;        // Y軸(虚数部)の最大値の初期値
   double val  = 200;        // 最大繰り返し回数の初期値

   // 数値入力用ダイアログ
   BOOL isok = InputMultiNumDLG("X軸の最小値", &Xmin, "X軸の最大値", &Xmax, 
                                "Y軸の最小値", &Ymin, "Y軸の最大値", &Ymax, 
                                "最大繰り返し回数", &val);
   if (!isok) {
       xp = new MSGraph<sWord>();
       xp->state = ERROR_GRAPH_CANCEL;
       return xp;
   }

   /////////////////////////////////////////
   // 以下に処理コードを書く
   //        入力 vp, 出力 xp
   /////////////////////////////////////////
   int xsize = Xsize;
   int ysize = (int)(xsize*(Ymax-Ymin)/(Xmax-Xmin) + 0.5);
   double dC = (Xmax-Xmin)/xsize;            // 刻み幅
   
   xp = new MSGraph<sWord>(xsize, ysize);    // (xsize × ysize) の画用紙を用意
   int    i, j, k;
   double Cr, Ci, Zr, Zi, Zrp, Zip;

   Ci = Ymax;
   for (j=0; j<xp->ys; j++) {
       Cr = Xmin;
       for (i=0; i<xp->xs; i++) {
           Zrp = 0.0;
           Zip = 0.0;
           k   = 0;

           // 漸化式の計算  Z(n+1) = Z(n) + C
           do {
               Zr  = Zrp*Zrp - Zip*Zip + Cr;
               Zi  = 2.*Zrp*Zip        + Ci;
               Zrp = Zr;
               Zip = Zi;
               k++;
           } while (Zr<Infnty && Zi<Infnty && k<=(int)val);        // 発散のチェック
           
           xp->point(i, j) = (sWord)((double)(val-k+1)*4095/val);  // 色を作って点を打つ (k==1:白, k==val+1:黒)
           Cr += dC;
       }
       Ci -= dC;
   }
   
   xp->color = GRAPH_COLOR_ARGB16;        // カラーモード

   /////////////////////////////////////////
   // 処理コードはここまで
   /////////////////////////////////////////

   return xp;
}

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-08-29 (火) 13:25:55