2012-05-25 31 views
1

为了理解我在某处读到的一句话,“我们放大分形越多,我们最可能需要执行的迭代越多”,我真的在挠挠头。了解分形特别是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); } 
    } 
} 

谢谢!

+0

我有一个用Postscript [here](http://code.google.com/p/xpost/downloads/detail?name=mandel2.ps)编写的交互式Mandelbrot生成器。它可以通过交互提示直接控制迭代(值'/ maxit'),但也可以将迭代缩放为缩放的副作用。 –

回答

1

这不是一个科学的答案,而是一个有常识的人。从理论上讲,决定一个点是否属于Mandelbrot集或没有,你应该重复无限,并检查值达到过无限。这实际上是没用的,所以我们提出假设:

  1. 我们迭代只有50次
  2. 我们检查迭代值不断变大超过2

当你放大到一个Mandelbrot集,第二个假设仍然有效。但是,缩放意味着增加了点坐标的重要小数位数。

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

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

1

你问缩放如何影响迭代和我的典型变焦迭代比的是,如果你放大到大小我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之间的关系。