2012-05-25 33 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之間的關係。