mandel_proc 
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;
}
Counter: 1632,
today: 4,
yesterday: 1
最終更新: 2011-07-31 (日) 14:53:34 (JST) (5289d) by iseki
