2008-11-26 32 views
4

這裏是我如何設置一個代表MandelBrot集的數組的僞代碼,但是當它保持1:1的寬高比時它變得非常可怕。爲什麼這會產生拉伸的分形?

xStep = (maxX - minX)/width; 
yStep = (maxY - minY)/height; 

for(i = 0; i < width; i++) 
for(j = 0; j < height; j++) 
    { 
    constantReal = minReal + xStep * i; 
    constantImag = minImag + yStep * j; 
    image[i][j] = inSet(constantReal, constantImag); 
    } 

謝謝!

+0

你可以顯示函數'inSet'在做什麼。 – Akusete 2008-11-26 04:32:15

+0

它計算該點的迭代次數,返回迭代次數或0,如果它「太遠」。 – 2008-11-26 05:01:20

回答

7

這裏是我如何設置一個代表MandelBrot集的數組的僞代碼,但它仍然在離開1:1的寬高比時變得非常可怕。

xStep = (maxX - minX)/width; 
yStep = (maxY - minY)/height; 

啊哈!這是因爲您必須保留相同的高寬比這兩個的圖像,您將繪製爲您要繪製複平面的區域。換句話說,它必須持有

width  maxX - minX 
---------- = --------------------- 
height maxY - minY 

(由此可見,特步== yStep。)您的代碼可能不執行這一要求。

0

這可能與您如何顯示image陣列有關。您使用寬度變量i作爲第一個索引,但通常第一個索引應該是最慢的變化,即高度。

嘗試將最後一行image[j][i] = ...

+0

難道這不是水平和垂直翻轉它,而不是伸展它? – MusiGenesis 2008-11-26 04:46:48

0

確保您的轉換都是正確的。 xStep和yStep可能是整數除法的結果,而不是預期的浮點除法(如果這是您示例中的C#,它需要一些明確的強制轉換才能正常工作)。

相關問題