我正在研究分形图。我需要能够放大特定点。
这是我到目前为止所得到的。如果将鼠标放在整个缩放的相同位置,它就可以工作。但如果你……
最好的方法可能是使用变换矩阵来缩放图像并找出鼠标所在的缩放图像中的哪个点,这样您就可以根据该点进行变换。
我知道你在C中工作,但我在js中创建了一个例子,因为它允许我更容易地演示工作代码。单击图像并使用Z和X进行放大和缩小。 https://jsfiddle.net/7ekqg8cb/
大多数代码都是实现矩阵乘法,矩阵求逆和矩阵点变换。重要的是:
var scaledMouse = transformPoint(mouse); matrixMultiplication([1, 0, scaledMouse.x, 0, 1, scaledMouse.y, 0, 0, 1]); var scale = 1.2; if (direction) { matrixMultiplication([scale, 0, 0, 0, scale, 0, 0, 0, 1]); } else { matrixMultiplication([1/scale, 0, 0, 0, 1/scale, 0, 0, 0, 1]); } matrixMultiplication([1, 0, -scaledMouse.x, 0, 1, -scaledMouse.y, 0, 0, 1]);
transformPoint使用变换矩阵的逆来找出鼠标相对于变换图像的位置。然后,变换矩阵被平移,缩放和平移,以围绕该点缩放变换矩阵。