【发布时间】:2016-06-21 09:22:43
【问题描述】:
当用户单击 Mandelbrot 集面板上的一个点时,我正在尝试编写一个程序来呈现 Mandelbrot 集,然后在另一个面板中呈现复数的 Julia 集。
但是,由于某种原因,我的 Julia 设置的渲染代码不起作用。它似乎只为最左上角的像素着色,我不知道为什么会这样。我不知道渲染方法中的数学是否错误,或者着色是否是问题。任何指示或解决方案都会很棒——我已经为此摸不着头脑了。
如果有人发现拥有所有代码更容易解决这个问题,请告诉我 - 谢谢。
这里只是 Julia 的设置面板的代码,其他的都被省略了。
class juliaPanel extends JPanel {
ComplexNumber fixedNumber = new ComplexNumber(0,0);
double newReal, newImaginary, oldReal, oldImaginary;
public void setFixedNumber(ComplexNumber fixedNumberIn) {
fixedNumber = fixedNumberIn;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
newReal = 0;
newImaginary = 0;
int i;
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
for (i=0; i< iterationsToDo; i++) {
oldReal = newReal;
oldImaginary = newImaginary;
newReal = oldReal * oldReal - oldImaginary * oldImaginary + fixedNumber.getReal();
newImaginary = 2 * oldReal * oldImaginary + fixedNumber.getImaginary();
if((newReal * newReal + newImaginary * newImaginary) > 4) break;
}
if(i == 255){
g.setColor(Color.BLACK);
}else{
g.setColor(Color.getHSBColor(i/100.0F,1F,1F));
}
g.fillRect(x, y, 1, 1);
}
}
}
【问题讨论】:
-
我怀疑问题是您没有在第二个循环中将 newReal 和 newImaginary 重置为 0。
-
你如何设置高度宽度迭代ToDo?
-
您好博客 - 您是否建议我应该将设置这些变量等于零的两个语句移动到迭代ToDo 循环中?非常感谢您的快速回复。
-
i/100.0F对我来说似乎不正确,因为参数需要介于 0 和 1 之间。我怀疑你想要(float) i / iterationsToDo。 -
嗨 gpasch - 这是一个用户定义的变量,存储在程序层次结构更高的变量中。我使用的测试号码是 100。非常感谢。
标签: java swing math awt paintcomponent