帮助渲染Java中的Mandelbrot集

时间:2010-04-26 20:33:51

标签: java jcomponent mandelbrot

我使用JComponent在Java中编写了Mandelbrot集的实现,但是当我渲染它时,我得到了奇怪的结果。除此之外,一切都是正确的。我只是不确定我做错了什么。任何代码审查也将不胜感激。

我的来源发布在pastebin上,因为这会占用太多空间:

JMandelbrot.java Mandelbrat.java

3 个答案:

答案 0 :(得分: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约定。 / LI>
  • 未使用iterations属性。

答案 1 :(得分:2)

  • 你正确地绘制了分形,但它确实很小。整个Mandelbrot集合适合半径为2的圆,因此它几乎不会覆盖400x500窗口中间的几个像素。

    您应该设计从屏幕窗口(从(0,0)(width,height))到复杂平面的某种映射,复杂平面的值应该在-2-2i到{{}附近{1}}左右。快速解决方法是将2+2ix-h表达式除以k-y,然后再将其传递给100,并将renderPoint的参数更改为renderPointint。最好的方法是指定所需的查看矩形,并使用它来确定映射。

  • 您正在GUI线程中计算分形图像。这是禁忌,因为在窗口打开之前应用程序似乎会挂起。我会在构造函数中将double的调用更改为:

    render()

答案 2 :(得分:0)

使用Marvin看看Mandelbrot分形渲染的这个例子: http://marvinproject.sourceforge.net/en/plugins/mandelbrot.html

还有一个用于Julia设置渲染的插件: http://marvinproject.sourceforge.net/en/plugins/juliaSet.html