2010-11-01 68 views
4

我已經給出了一些與Mandelbrot集合的分形可視化有關的工作。一些幫助渲染Mandelbrot集合

我不是在尋找一個完整的解決方案(自然地),我正在尋求關於複數的軌道的幫助。

說我有一個給定的Complex數字從複平面上的一個點派生。我現在需要根據軌道是否增加幾個數量級來迭代它的軌道序列和繪圖點。

如何收集複數的軌道?任何指導都非常感激(鏈接等)。測試軌道序列所需的Math函數上的任何指針,例如Math.pow()

我正在使用Java,但這不是特別相關。再次

謝謝, 亞歷克斯

+1

如果您沒有mathemtical背景,您可能需要刷新您的基本[複雜算術](http://mathworld.wolfram.com/ComplexNumber.html)。 – 2010-11-01 01:17:59

回答

7

當您顯示Mandelbrot集時,只需將實數和虛數平面分別轉換爲x和y座標。

因此,例如複數4.5 + 0.27i轉換爲x = 4.5, y = 0.27

Mandelbrot集合是方程式Z = Z² + C從未達到值的所有點,其中| Z | > = 2,但實際上在特定的迭代次數內包含值不超過2的所有點,例如1000.要獲得您通常看到的色彩渲染,可以爲外部點指定不同的顏色這取決於他們達到極限的速度。

由於數據是複數形式,方程式實際上爲Zr + Zi = (Zr + Zi)² + Cr + Ci。你可以將它分成兩個等式,一個用於真實平面,另一個用於虛擬平面,然後它只是簡單的代數。 C是要測試的點的座標,Z的初始值爲零。

下面是從我的多線程曼德爾布羅發電機圖像:)

Mandelbrot set

+0

這太棒了,非常感謝! – Alex 2010-11-01 02:09:46

+0

的確很不錯。可以看到亮度隨着有界複數附近的位置而增加的顏色。 – Alex 2010-11-01 02:22:40

1

鎢Mathworld有nice site談論Mandelbrot集。

複雜的類將是最有幫助的。

也許像this這樣的例子會刺激一些想法。我不會推薦使用Applet。

除了像正弦,餘弦,指數等功能之外,您還必須知道如何對複數進行加,減,乘,除以及冪運算。如果您不知道這些,我會從那裏開始。

我教過的書是Ruel V. Churchill "Complex Variables"

+0

好吧,我的r.Max = 2的數量級,代表有界的值繪製。軌道值是通過複數運算得出的。任何想法如何各種算術操作有關產生軌道? – Alex 2010-11-01 01:30:06

+0

除了正弦,餘弦,指數等功能之外,您還必須知道如何對複數進行加,減,乘,除以及乘冪操作。如果您不知道這些,我會從那裏開始。 – duffymo 2010-11-01 01:36:26

+0

好的軌道是複平面上兩個複數的乘積P.如果P與兩個複數的和S相比有序度大於2,則它是無界的,因此不是Mandelbrot集的一部分。這是否接近? – Alex 2010-11-01 02:03:33

3

其實Mandelbrot集是複數集爲其迭代收斂的。

所以Mandelbrot套裝中唯一的一點就是中間那種無聊的顏色。你看到的所有漂亮的顏色只不過是表示邊界附近點(但錯誤的一邊)旋轉到無窮遠的速度。

在mathspeak,

M = {c in C : lim (k -> inf) z_k = 0 } where z_0 = c, z_(k+1) = z_k^2 + c 

即挑選任何複雜的數字c。現在確定它是否在集合中,重複迭代它z_0 = c,z_(k + 1)= z_k^2 + c,z_k將接近零或無窮大。如果它的極限(因爲k趨於無窮大)爲零,那麼它是在其中。否則不是。

有可能證明一旦| z_k | > 2,它不會收斂。這是一個很好的優化練習:IIRC | Z_k |^2> 2就足夠了......無論哪種方式,平方都會爲您節省昂貴的sqrt()函數。

+1

隨着集合的定義,z_0 = 0,它給出z_1 = z_0^2 + c = c。 – Guffa 2010-12-01 08:32:46

+0

不錯的一個!很整潔!謝謝 – 2010-12-01 10:21:25

0
/d{def}def/u{dup}d[0 -185 u 0 300 u]concat/q 5e-3 d/m{mul}d/z{A u m B u 
m}d/r{rlineto}d/X -2 q 1{d/Y -2 q 2{d/A 0 d/B 0 d 64 -1 1{/f exch d/B 
A/A z sub X add d B 2 m m Y add d z add 4 gt{exit}if/f 64 d}for f 64 div 
setgray X Y moveto 0 q neg u 0 0 q u 0 r r r r fill/Y}for/X}for showpage