我使用JComponent在Java中编写了Mandelbrot集的实现,但是当我渲染它时,我得到了奇怪的结果。除此之外,一切都是正确的。我只是不确定我做错了什么。任何代码审查也将不胜感激。
我的来源发布在pastebin上,因为这会占用太多空间:
答案 0 :(得分:4)
问题:
解决方案:
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约定。 / LI>
iterations
属性。答案 1 :(得分:2)
你正确地绘制了分形,但它确实很小。整个Mandelbrot集合适合半径为2的圆,因此它几乎不会覆盖400x500窗口中间的几个像素。
您应该设计从屏幕窗口(从(0,0)
到(width,height)
)到复杂平面的某种映射,复杂平面的值应该在-2-2i
到{{}附近{1}}左右。快速解决方法是将2+2i
和x-h
表达式除以k-y
,然后再将其传递给100
,并将renderPoint
的参数更改为renderPoint
到int
。最好的方法是指定所需的查看矩形,并使用它来确定映射。
您正在GUI线程中计算分形图像。这是禁忌,因为在窗口打开之前应用程序似乎会挂起。我会在构造函数中将double
的调用更改为:
render()
答案 2 :(得分:0)
使用Marvin看看Mandelbrot分形渲染的这个例子: http://marvinproject.sourceforge.net/en/plugins/mandelbrot.html
还有一个用于Julia设置渲染的插件: http://marvinproject.sourceforge.net/en/plugins/juliaSet.html