1 回答
TA贡献1830条经验 获得超9个赞
看起来您的递归 mandelbrot 函数的终止条件不正确。
您希望 mandelbrot 函数返回,当
z 的绝对值超过 2 或
达到最大递归深度。
另外,你永远不会增加 i。
所以更新后的函数看起来像:
public static int mandelbrot(ComplexNumber c, ComplexNumber z, int i, int n) {
if (i >= n) {
// mandelbrot function does not diverge after n iterations.
// Returning -1 as a magic value to indicate that the point c is in the mandelbrot set.
// Values may already be outside of the mandelbrot set in the 0th iteration, so returning -1 makes more sense.
return -1;
} else if (z.abs() >= 2.0) {
// mandelbrot function is diverging after i iterations.
return i;
} else {
// recursively call mandelbrot function with an updated z and an incremented i.
return mandelbrot(c, z.squared().add(c), i + 1, n);
}
}
最后,如果您选择为 mandelbrot 集中的某个点返回 -1,则必须更新您的颜色计算以将这些点设置为黑色。
int mb = mandelbrot(c, z0, 0, maxRecurse);
if (mb == -1) {
image.setRGB(x, y, 0);
} else {
// set the color of your image as usual
}
添加回答
举报