确定mandelbrot缩放的坐标
Determining coordinates for mandelbrot zoom
我有一个mandelbrot集合,我想放大。mandelbrot是围绕中心坐标、mandelbrot大小和缩放级别计算的。原来的mandelbrot是围绕Real =-0.6, im=0.4, Real和im的大小均为2。
我希望能够点击图像中的一个点并计算一个新的点,并在该点周围放大
包含它的窗口是800x800px,所以我认为这将使点击右下角等于real=0.4和im=-0.6的中心,点击左上角是real=-1.6和im=1.4
我用:
对于实值
a+b=0.4 => a=0.0025
a+b=-1.6 => b=-1.6
表示虚值
800c+d=-0.6 => c=-0.0025
但是,如果我继续将mandelbrot的大小设置为2,缩放级别设置为2,这将不起作用。我是不是漏掉了什么关于坐标和变焦级别的信息?
我在c# Mandelbrot中有类似的缩放问题。我的解决方案是以百分比计算点击位置到中心的差异,将其与中心的最大单位(宽度/缩放* 0.5,宽度=高度,缩放= n * 100)相乘,并将其添加到当前值中。所以我的代码是这样的(假设我从点击中得到sx
和sy
作为参数):
double[] o = new double[2];
double digressLRUD = width / zoom * 0.5; //max way up or down from the center in coordinates
double shiftCenterCursor_X = sx - width/2.0; //shift of cursor to center
double shiftCenterCursor_X_percentage = shiftCenterCursor_X / width/2.0; //shift in percentage
o[0] = x + digressLRUD * shiftCenterCursor_X_percentage; //new position
double shiftCenterCursor_Y = sy - width/2.0;
double shiftCenterCursor_Y_percentage = shiftCenterCursor_Y / width/2.0;
o[1] = y - digressLRUD * shiftCenterCursor_Y_percentage;
这是可行的,但你必须更新缩放(我用2乘以它)。
另一点是将选定的中心移动到图像的中心。我使用了一些计算:
double maxRe = width / zoom;
double centerRe = reC - maxRe * 0.5;
double maxIm = height / zoom;
double centerIm = -imC - maxIm * 0.5;
这将为你带来你必须通过你的算法的坐标,所以它会渲染选定的地方。
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 在 c++ 中缩放浮点值
- 如何防止 DirectX C++程序的拉伸/缩放
- glReadPixels移动坐标与缩放
- 确定mandelbrot缩放的坐标
- 为什么我的鼠标光标坐标突然缩放