我使用JComponent編寫了Java中的Mandelbrot集合的實現,但是在渲染時我得到了奇怪的結果。除此之外,一切都編譯正確。我只是不確定我在做什麼錯。任何代碼審查也將不勝感激。幫助渲染Java中的Mandelbrot集合
我的源通發佈引擎收錄,因爲它會在這裏佔用太多的空間:
JMandelbrot.java Mandelbrat.java
我使用JComponent編寫了Java中的Mandelbrot集合的實現,但是在渲染時我得到了奇怪的結果。除此之外,一切都編譯正確。我只是不確定我在做什麼錯。任何代碼審查也將不勝感激。幫助渲染Java中的Mandelbrot集合
我的源通發佈引擎收錄,因爲它會在這裏佔用太多的空間:
JMandelbrot.java Mandelbrat.java
問題:
解決方案:
renderPoint
方法接受double
參數並把它作爲renderPoint((x - h)/100.0, (k - y)/100.0)
看到更有趣的東西。renderPoint
返回return (((r << 16) | (g << 8) | b)<<4)
並設置MaxColorBit = 16
,我設法看到了一些不錯的東西。代碼評審:
(int)Math.floor(Width/2)
可以通過Width/2
被替換,因爲這是一個整數除法。width
和height
)開始屬性Width
和Height
,因爲這是一個Java約定,它有助於區分類和屬性。iterations
屬性未使用。你正確繪製的分形,但它是非常小的。整個Mandelbrot集適合半徑爲2的圓,所以它幾乎不會覆蓋400x500窗口中間的幾個像素。
你應該制定某種從屏幕窗口(肚裏從(0,0)
到(width,height)
)映射到複平面上,它應該在的-2-2i
附近值2+2i
左右。快速解決方案是將x-h
和k-y
表達式除以100
,然後再將它們傳遞給renderPoint
,並將renderPoint
的參數從int
更改爲double
。最好的辦法是指定所需的查看矩形並使用它來確定映射。
您正在計算GUI線程中的分形圖像。這是一個禁忌,因爲在窗口打開之前,應用程序會掛起。我想改變的render()
調用構造函數看起來像這樣:
new Thread() {
public void run() { render(); }
}.start();
+1建議使用一個單獨的線。但在這種情況下,必須在render()完成後請求'repaint()',否則計算的圖像將不會顯示:public void run(){render();重繪(); }' – 2010-04-26 21:17:55
是的,雖然我會在每行完成後重新繪製。 – 2010-04-26 21:28:19
看看曼德爾布羅分形呈現本例中使用馬文: http://marvinproject.sourceforge.net/en/plugins/mandelbrot.html
還爲朱莉婭插件組呈現: http://marvinproject.sourceforge.net/en/plugins/juliaSet.html
非常感謝。但是,你能否在回報線上解釋額外的4點移動? – SDLFunTimes 2010-04-26 21:31:45
這是我的快速和骯髒的顏色編碼黑客,因爲否則圖像會太黑看不到(嘗試它)。通常的顏色編碼如下:計算迭代直到停止條件成立或達到預定義的迭代計數。你拿出實際執行的迭代次數。該數字被用作顏色表(「調色板」)的索引。調色板通常包含一個或多個顏色的平滑漸變。以http://commons.wikimedia.org/wiki/File:Mandelbrot_palette_colour_editing_with_Fractint.png爲例。 – 2010-04-26 21:40:01