数列の発散、収束を計算していた関数と、それに関連する部分を少しだけ変えたプログラムを次に示す。発散する点においては、発散するまでに計算した回数を利用して色付けした。
#include <complex> #include <eggx.h> using namespace std; #define BASE_SCALE 300 #define RE_START -2 #define RE_END 1 #define RE_LENGTH (RE_END - RE_START) #define RE_STEP ((double)RE_LENGTH/WIDTH) #define RE2X(r) (int)((r-RE_START)*BASE_SCALE) #define IM_START -1 #define IM_END 1 #define IM_LENGTH (IM_END - IM_START) #define IM_STEP ((double)IM_LENGTH/HEIGHT) #define IM2Y(i) (int)((i-IM_START)*BASE_SCALE) #define WIDTH (BASE_SCALE * RE_LENGTH) #define HEIGHT (BASE_SCALE * IM_LENGTH) #define INF 2 #define MAX_ITER 1000 #define EGGX_BLACK 0 int calc(complex<double> c) { int n; complex<double> z; for (n = 0; n < MAX_ITER; n++) { z = z*z + c; if (abs(z) >= INF) return n%15+1; } return EGGX_BLACK; } void draw(int win) { double re, im; for (re = RE_START; re <= RE_END; re += RE_STEP) { for (im = IM_START; im <= IM_END; im += IM_STEP) { int color = calc(complex<double>(re, im)); newpen(win, color); pset(win, RE2X(re), IM2Y(im)); } } } int main() { int win; gsetinitialbgcolor("gray"); win = gopen(WIDTH, HEIGHT); draw(win); ggetch(); gclose(win); return 0; }
0 件のコメント:
コメントを投稿