理解分形,特别是mandelbrot集

时间:2012-05-25 10:53:52

标签: fractals mandelbrot

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

到目前为止,我还没有找到任何证明这样说的数学/学术论文。 我还设法找到一个计算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); }
    }
}

谢谢!

2 个答案:

答案 0 :(得分:1)

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

  1. 我们只迭代50次
  2. 我们检查迭代值是否大于2
  3. 当您放大Mandelbrot集时,第二个假设仍然有效。但缩放表示增加点坐标的重要小数位数

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

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

答案 1 :(得分: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的缩放因子,但任何事情都有。重要的是你需要保持zoomfactor和interations之间的关系。