1

我真的在努力理解我在某处读到的一句话:“我们在分形内放大的越多,我们最有可能需要执行的迭代越多”。

到目前为止,我还没有找到任何证明这句话的数学/学术论文。我还设法找到了一个计算 mandelbrot 集的小代码,取自这里: http ://warp.povusers.org/Mandelbrot/ 但是,无法理解缩放如何影响迭代。

double MinRe = -2.0;
double MaxRe = 1.0;
double MinIm = -1.2;
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
double Re_factor = (MaxRe-MinRe)/(ImageWidth-1);
double Im_factor = (MaxIm-MinIm)/(ImageHeight-1);
unsigned MaxIterations = 30;

for(unsigned y=0; y<ImageHeight; ++y)
{
    double c_im = MaxIm - y*Im_factor;
    for(unsigned x=0; x<ImageWidth; ++x)
    {
        double c_re = MinRe + x*Re_factor;

        double Z_re = c_re, Z_im = c_im;
        bool isInside = true;
        for(unsigned n=0; n<MaxIterations; ++n)
        {
            double Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im;
            if(Z_re2 + Z_im2 > 4)
            {
                isInside = false;
                break;
            }
            Z_im = 2*Z_re*Z_im + c_im;
            Z_re = Z_re2 - Z_im2 + c_re;
        }
        if(isInside) { putpixel(x, y); }
    }
}

谢谢!

4

2 回答 2

1

您问缩放如何影响迭代,我的典型缩放与迭代比率是,如果您放大到 9 倍大小,我会将迭代增加 1.7。大小的 9 分之一当然意味着宽度和高度都除以 3。

使这个更通用我实际上在我的代码中使用它

Complex middle = << calculate from click in image >>
int zoomfactor = 3;
width = width / zoomfactor;
maxiter = (int)(maxiter * Math.Sqrt(zoomfactor));
minimum = new Complex(middle.Real - width, middle.Imaginary - width);
maximum = new Complex(middle.Real + width, middle.Imaginary + width);

我发现缩放和迭代之间的这种关系非常有效,分形中的细节在深度缩放中仍然很好,而不会因为迭代太快而变得太疯狂。

如果您自己喜欢,您想缩放多快,我喜欢 3 的缩放因子,但任何事情都会发生。重要的是你需要保持缩放因子和交互增加之间的关系。

于 2012-10-06T03:21:23.017 回答
1

这不是一个科学的答案,而是一个有常识的答案。理论上,要确定一个点是否属于 Mandelbrot 集,您应该无限迭代,并检查该值是否达到Infinity。这实际上是无用的,所以我们做出假设:

  1. 我们只迭代 50 次
  2. 我们检查迭代值是否大于 2

当您放大 Mandelbrot 集时,第二个假设仍然有效。然而,缩放意味着增加点坐标的有效小数位数

假设您开始(0.4,-0.2i). 反复迭代此值会增加使用的数字,但不会丢失有效数字。现在,当您的点坐标看起来像这样时:(0.00000000045233452235, -0.00000000000943452634626i)要检查该点是否在集合中,您需要更多的迭代来查看该迭代是否会达到 2 更不用说如果您使用某种浮点类型,您将丢失有效数字一些缩放级别,您必须切换到任意精度库。

尝试是您最好的朋友 :-) 计算具有低迭代和高迭代的集合,并从第一个图像中减去第二个图像。您将始终在边缘看到变化(黑色像素与彩色像素相遇),但如果您的缩放级别很高(意味着:点坐标有很多小数位),您将获得不同的图像。

于 2012-06-04T14:41:59.987 回答