我在放大我的 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;
这将为您带来必须通过算法的坐标,以便渲染选定的位置。