我是一个相当新的C ++编程,为了改进我试图制作一个mandelbrot设置consol应用程序。我已经让它几乎完美地工作:图像生成,我可以放大/缩小,并且非常容易移动。我遇到的问题是,当我开始放大图像的边缘时,边缘将开始“切断”
图片缩小:
图片放大了一点 - 你可以看到最后一个“圆圈”的一半被砍掉了:
最后,随着时间的推移放大,整个最后一个“圈子”已被完全切断:
如果我继续放大,那么较大圆圈的边缘也会开始被切断。 我完全不明白为什么会发生这种情况,但我的猜测是我的缩放方法无论如何应该受到责备。
以下是算法计算函数的源代码(我猜错误的地方):
int fractalCalc(double x0, double y0, double zoom)
{
double x = 0;
double y = 0;
int iteration = 0;
int max_iteration = 1000; //1000
double xtemp;
while (x*x + y*y < 2*2 && iteration < max_iteration) //x*x + y*y < 2*2 && iteration < max_iteration
{
xtemp = x*x - y*y + x0;
y = 2*x*y + y0;
y /= zoom;
x = xtemp;
x /= zoom;
iteration++;
}
return iteration;
}
对于整个源代码,请转到(因为我的预测很可能是错误的):http://pastebin.com/WhbS0WYE
欢迎任何建议和/或协助。提前谢谢!
答案 0 :(得分:3)
我没有密切关注数学,但我怀疑这是由于你处理变焦的方式。我建议不在处理实际Mandelbrot深度计算的代码中执行此操作。
相反,使用缩放来选择一个“视口”,从中选择样本。找出您想要采样的坐标,然后将fractalCalc
函数写入只需计算特定点的深度。该功能不需要知道您正在显示的内容。
除此之外,这种关注点的分离(视口与分形部分)将使得更容易推理和调试。这也意味着你每次迭代的计算量都会减少,这会导致浮点不准确性降低。