放大后缩放和平移多边形



假设图像中有一个三角形。我们放大图像,缩放的中心是我们的光标所在的位置。

三角形需要随着图像的缩放进行平移和缩放。

例如,在原始的未缩放图像中,我有以下几点:

原始图像三角形:(212162(,(172162(

然后,放大后,我们得到分数:

2倍变焦三角形:(231173(、(151173(、

这是我知道的一些信息。x和y从原始图像到新图像的偏移量分别为97和76。图像按因子2缩放。此外,实际图像大小,即像素的x和y数量,保持不变。

我能够使用根据原始帧的点正确计算新点的位置

x = (og_x-ZoomOffsetX)*ZoomLevel + ZoomLevel/2;
y = (og_y-ZoomOffsetY)*ZoomLevel + ZoomLevel/2;

其中,og_x、og_y是原始帧中的x和y,offsetX和y是基于我们在帧上放大的位置(相对于原始图像(的偏移,ZoomLevel是我们放大的因子(相对于原始图片(,它上升2,4,8…

然后,下一组点是

4倍变焦三角形:(218222(,(58222(,(138,62(

其中缩放现在距离原始值为4倍,相对于原始值,x和y偏移分别为158和107。

然后,

8倍变焦三角形:(236340(,(-84340(,(76,20(

其中缩放现在是原始缩放的8倍,x和y偏移分别为183和120。

我需要知道什么/我需要什么参数,才能仅基于前一张图像给出现在缩放和平移(由于缩放(的三角形的新(x,y(坐标?即基于4倍变焦的8倍变焦与基于原始图像的8倍缩放。根据我掌握的信息,我想不通。

注意:无论偏移是相对于原始图像还是先前图像,我实际上都不确定。。我正在阅读别人的代码并试图理解它。不过ZoomLevel绝对是相对于原始图像的。

此外,如果它有助于提出解决方案,那么这一切都是用cpp编写的,这种缩放是在qt小部件中完成的,其中使用qt 中的QPointF定义点

这三个链接彻底回答了我的问题。

https://medium.com/@benjamin.bott/zooming-at-the-mouse-coordinates-with-affine-transformations-86e7312fd50b

使用矩阵放大固定点

放大一个点(使用缩放和平移(

最新更新