Mandelbrot集合
Mandelbrot集合とは,$ z_0 = 0,$ z_{n+1} = z_n^2 - c ($ n = 0, 1, \ldots) で定義される複素数の数列 $ \{ z_n \} が有界である($ n \to \infty で $ |z_n| が発散しない)ような複素数 $ c の集合である。ただし計算機では無限大まで計算できないので十分大きな値まで計算して $ |z_n| が 2 を超えないなら有界と判断する。
code:mandel.c
int main(void)
{
int i, j, count;
double x, y, a, b, a2, b2;
double d = 0.005, xmin = -1, ymin = -1;
for (i = 1; i <= M; i++) colori = WHITE; for (i = 0; i < XMAX; i++) {
x = xmin + i * d;
for (j = 0; j < YMAX; j++) {
y = ymin + j * d; a = x; b = y;
a2 = a * a; b2 = b * b; count = M;
while (a2 + b2 <= 4 && count) {
b = 2 * a * b - y; a = a2 - b2 - x;
a2 = a * a; b2 = b * b; count--;
}
gr_dot(i, j, colorcount); }
}
gr_BMP("mandel.bmp");
return 0;
}
while ループを脱出したときの count の値が 0 であれば $ c はMandelbrot集合に含まれるので黒にする。それ以外は上では白にしているが,count の値に応じて色(光背)を付けると美しいカラーの図ができるのでやってみよう。