为什么我的 Mandelbrot 集的颜色看起来不好看而且不对称?

0 java javafx mandelbrot

我想知道为什么我的 Mandelbrot 集的背景不如另一张图片的背景好。另外,如果我将 iterationChecker 的 if 语句中的数字 4 设置为大于 4 的任何其他数字,为什么 Mandelbrot 集仍然显示?

曼德尔布罗特集,背景看起来是歪的:

歪

我希望背景看起来像这样:

欲望

Jam*_*s_D 5

由于计算迭代转义的条件中存在拼写错误,迭代计数略有偏差:

public int iterationChecker(double cr, double ci) {
    int iterationsOfZ = 0;
    double zr = 0.0;
    double zi = 0.0;

    //while (iterationsOfZ < maximumIterations && (zr * zr) + (zi + zi) < 4){

    while (iterationsOfZ < maximumIterations && (zr * zr) + (zi * zi) < 4){
        double oldZr = zr;
        zr = (zr * zr) - (zi * zi) + cr;
        zi = 2 * (oldZr * zi) + ci;
        iterationsOfZ++;
    }
    return iterationsOfZ;
}
Run Code Online (Sandbox Code Playgroud)

另外,如果我将 iterationChecker 的 if 语句中的数字 4 设置为大于 4 的任何其他数字,为什么 Mandelbrot 集仍然显示?

如果(with )c定义的序列对于 all 都是有界的,则认为该点位于 Mandelbrot 集中。z(n+1) = z(n)^2 + cz(0)=0n

很容易证明 if |c|>2thenc不在 Mandelbrot 集中,并且对于|c|<=2,如果|z(n)| > 2对于任何 n,则序列z(n)是无界的,因此 if |z(n)| > 2(ie |z|^2=zr^2+zi^2 > 4) thenc不在 Mandelbrot 集中。

所以策略是迭代z -> z^2 + c,并且如果|z|^2>4在任何一点得出的结论z都不在 Mandelbrot 集中。当然,如果你选择任何k>4,那么如果|z|^2 > k,那么|z|^2 > 4z也不在 Mandelbrot 集合中。

查找zwith|z|^2 > 4称为“转义”,转义之前的迭代次数决定了颜色。如果您达到某个最大迭代次数(您选择 50)而没有转义,则您认为c“接近”Mandelbrot 集或在 Mandelbrot 集内,并将其涂成黑色。

因此,将转义级别更改为另一个大于 4 的数字可能会改变颜色,但不会改变太多:从该点开始, 的绝对值会|z(n)|增长n^2。因此,你必须将逃生阈值提高很多,才能使逃生时间相差超过 1 或 2。