2010-04-26 80 views

回答

4

問題:

  • 的形象是我從代碼的期望。 Mandelbrot組的直徑爲2,所以你只能看到中間的一些像素。

解決方案:

  • 更改renderPoint方法接受double參數並把它作爲renderPoint((x - h)/100.0, (k - y)/100.0)看到更有趣的東西。
  • 更改迭代計數和顏色編碼,因爲現在您要爲每個內部像素計算255^3次迭代。通過將renderPoint返回return (((r << 16) | (g << 8) | b)<<4)並設置MaxColorBit = 16,我設法看到了一些不錯的東西。

代碼評審:

  • (int)Math.floor(Width/2)可以通過Width/2被替換,因爲這是一個整數除法。
  • 您應該用小寫字母(widthheight)開始屬性WidthHeight,因爲這是一個Java約定,它有助於區分類和屬性。
  • iterations屬性未使用。
+0

非常感謝。但是,你能否在回報線上解釋額外的4點移動? – SDLFunTimes 2010-04-26 21:31:45

+0

這是我的快速和骯髒的顏色編碼黑客,因爲否則圖像會太黑看不到(嘗試它)。通常的顏色編碼如下:計算迭代直到停止條件成立或達到預定義的迭代計數。你拿出實際執行的迭代次數。該數字被用作顏色表(「調色板」)的索引。調色板通常包含一個或多個顏色的平滑漸變。以http://commons.wikimedia.org/wiki/File:Mandelbrot_palette_colour_editing_with_Fractint.png爲例。 – 2010-04-26 21:40:01

2
  • 你正確繪製的分形,但它是非常小的。整個Mandelbrot集適合半徑爲2的圓,所以它幾乎不會覆蓋400x500窗口中間的幾個像素。

    你應該制定某種從屏幕窗口(肚裏從(0,0)(width,height))映射到複平面上,它應該在的-2-2i附近值2+2i左右。快速解決方案是將x-hk-y表達式除以100,然後再將它們傳遞給renderPoint,並將renderPoint的參數從int更改爲double。最好的辦法是指定所需的查看矩形並使用它來確定映射。

  • 您正在計算GUI線程中的分形圖像。這是一個禁忌,因爲在窗口打開之前,應用程序會掛起。我想改變的render()調用構造函數看起來像這樣:

    new Thread() { 
        public void run() { render(); } 
    }.start(); 
    
+2

+1建議使用一個單獨的線。但在這種情況下,必須在render()完成後請求'repaint()',否則計算的圖像將不會顯示:public void run(){render();重繪(); }' – 2010-04-26 21:17:55

+1

是的,雖然我會在每行完成後重新繪製。 – 2010-04-26 21:28:19