2010-04-26 42 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