我使用 JComponent 在 Java 中编写了 Mandelbrot 集的实现,但是在渲染它时却得到了奇怪的结果。除此之外,一切都编译正确。我只是不确定我做错了什么。任何代码审查也将不胜感激。
我的来源发布在 pastebin 上,因为它在这里会占用太多空间:
我使用 JComponent 在 Java 中编写了 Mandelbrot 集的实现,但是在渲染它时却得到了奇怪的结果。除此之外,一切都编译正确。我只是不确定我做错了什么。任何代码审查也将不胜感激。
我的来源发布在 pastebin 上,因为它在这里会占用太多空间:
问题:
解决方案:
renderPoint
方法以接受double
参数并调用它renderPoint((x - h)/100.0, (k - y)/100.0)
以查看更有趣的内容。renderPoint
通过更改toreturn (((r << 16) | (g << 8) | b)<<4)
和 setting的返回值,我设法看到了一些不错的东西MaxColorBit = 16
。代码审查:
(int)Math.floor(Width / 2)
可以用 代替Width / 2
,因为那是整数除法。Width
and ) 开头属性,因为这是有助于区分类和属性的 Java 约定。Height
width
height
iterations
不使用该属性。你正确地绘制了分形,但它真的很小。整个 Mandelbrot 集适合半径为 2 的圆,因此它几乎不会覆盖 400x500 窗口中间的几个像素。
您应该设计某种从屏幕窗口(从(0,0)
到(width,height)
)到复平面的映射,它的值应该在-2-2i
to2+2i
左右。一个快速的解决方法是在将x-h
andk-y
表达式100
传递给 之前将它们除以renderPoint
,并更改renderPoint
fromint
到的参数double
。最好是指定所需的查看矩形并使用它来确定映射。
您正在 GUI 线程中计算分形图像。这是一个禁忌,因为在窗口完成打开之前应用程序似乎会挂起。我会将render()
构造函数中的调用更改为如下所示:
new Thread() {
public void run() { render(); }
}.start();
看看这个使用 Marvin 的 Mandelbrot 分形渲染示例:http: //marvinproject.sourceforge.net/en/plugins/mandelbrot.html
还有一个用于 Julia 集渲染的插件:http: //marvinproject.sourceforge.net/en/plugins/juliaSet.html