gpt4 book ai didi

c++ - Mandelbrot 集缩放

转载 作者:行者123 更新时间:2023-11-30 02:59:19 24 4
gpt4 key购买 nike

我是 C++ 编程的新手,为了改进,我正在尝试制作一个 mandelbrot set consol 应用程序。我已经让它几乎完美地工作:图像生成,我可以放大/缩小,并且非常容易地四处移动。不过,我遇到的问题是,当我开始放大图像的边缘时,边缘将开始“被切断”

图像缩小:

http://i.imgur.com/Fy70o.png

图片放大了一点——你可以看到最后一个“圆圈”被切掉了一半:

http://i.imgur.com/1nlVP.png

最后,为了时间放大,最后一个“圈”已经被完全砍掉了:

http://i.imgur.com/lao8j.png

如果我继续放大,那么大圆圈的边缘也会开始被切掉。我不完全明白为什么会这样,但我猜是我的缩放方法有某种原因。

这里是算法计算函数的源码(我猜错的地方):

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

欢迎任何建议和/或帮助。提前致谢!

最佳答案

我没有仔细计算过,但我怀疑这是由于您处理缩放的方式所致。我建议不要在处理实际 Mandelbrot 深度计算的代码中这样做。

相反,使用缩放来选择一个“视口(viewport)”,从中选择样本。找出您想要采样的坐标,然后编写您的 fractalCalc 函数来只是计算特定点的深度。该函数不需要知道关于您正在显示的内容的任何信息。

除此之外,这种关注点分离(视口(viewport)与分形部分)将使推理和调试变得更容易。这也意味着您每次迭代进行的计算更少,这应该会导致更少的浮点不准确。

关于c++ - Mandelbrot 集缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com