我正在计算 mandelbrot 集,能够使用 OpenGL 将其缩放并打印到屏幕上。
如您所知,mandelbrot 集由一个矩形(右上角和左下角)定义,每次我“放大”和“缩小”时,我都会通过将左下点移动到右上角和右上角反之亦然。最终,这 2 个点应该会相遇并完成缩放过程。
根据许多 YOUTUBE 电影,我可以清楚地看到有些电影可以让您达到 1000 倍变焦。在我的程序中,我几乎无法达到 X6。在调试时,我可以看到我的 2 点,它们定义了 mandelbrot 集到达彼此(x1,y1) = (x2,y2)
。
几件事:
(x1,y1) & (x2,y2)
被定义为浮点数。我应该使用 double 代替吗?我的 mandelbrot 由 (512X512) 点定义。够了吗?虽然我不确定它是否与问题有关。
我面临的另一个问题是 - 我将集合打印为高度图(3D 集合)。当每个 Y 分量代表某个点达到无穷大所需的迭代次数时。但是,每次我放大整个集合时,我的相机位置都会越来越高,最终我的相机被集合消耗掉了。有没有办法计算差异并将相机从集合中移开(相应地从缩放点移开?)
计算集合的代码:
double ratiox = instance->foundPointOnHost.x / ((instance->constVal[1][0] - instance->constVal[0][0]));;
double ratioy = 1-instance->foundPointOnHost.z / ((instance->constVal[1][1] - instance->constVal[0][1]));;
double xrange = instance->m_GraphConfig.xru-instance->m_GraphConfig.xld;
double yrange = instance->m_GraphConfig.yru-instance->m_GraphConfig.yld;
instance->m_GraphConfig.xld += 5*direction*0.005*ratiox*xrange;
instance->m_GraphConfig.xru -= 5*direction*0.005*(1.-ratiox)*xrange;
instance->m_GraphConfig.yld += 5*direction*0.005*(1.-ratioy)*yrange;
instance->m_GraphConfig.yru -= 5*direction*0.005*ratioy*yrange;
一些事情 :
instance->FoundPointOnHost = 我要放大的点。
instance->constVal = 包含集合的原始大小(开始等于 [xru,yru] [xld,yld])
(xru,yru) = 右上角集合的点 (xld,yld) = 集合的左下点
谢谢!