Math 找到缩放中心(视口内),给定两个变换(放大中心)

Math 找到缩放中心(视口内),给定两个变换(放大中心),math,geometry,scaling,Math,Geometry,Scaling,问题是: 在我的视口中缩放对象。我知道刻度、大小和位置在刻度前后。我不知道扩大的中心——这是我想要找到的 我的数据类型: transform t = {x: 0, y: 0, kx: 1, ky: 1} x、 y=>对象到视口原点的偏移 kx,ky=>对象的x和y比例 我拥有的数据: var sizeOfViewport = {width, height} var originalSizeOfObject = {width, height} // in my case same as vie

问题是: 在我的视口中缩放对象。我知道刻度、大小和位置在刻度前后。我不知道扩大的中心——这是我想要找到的

我的数据类型:

transform t =  {x: 0, y: 0, kx: 1, ky: 1}
x、 y=>对象到视口原点的偏移

kx,ky=>对象的x和y比例

我拥有的数据:

var sizeOfViewport = {width, height}
var originalSizeOfObject = {width, height} // in my case same as viewport size
var transformBefore // offset to viewport origin and scale
var transformAfter // offset to viewport origin and scale
因此,给定描述原始对象和缩放对象的大小和位置以及视口大小的两个变换-我如何找到放大中心。。例如,如果对象是从鼠标位置缩放的-如何找出缩放过程中鼠标的位置

我们有T1之前和T2之后的变换。根据这些,我们可以计算相对变换T,假设列向量约定:

T2 = T * T1
 T = T2 * T1^-1
然后,我们想找到这个相对变换的中心。插入变换变量,我们得到:

    / kx2   0   x2 \   / kx1   0   x1 \^-1
T = |  0   ky2  y2 | * |  0   ky1  y1 |
    \  0    0    1 /   \  0    0    1 /

    / kx2   0   x2 \   / 1/kx1   0    -x1/kx1 \
  = |  0   ky2  y2 | * |   0   1/ky1  -y1/ky1 |
    \  0    0    1 /   \   0     0       1    /

    / kx2/kx1     0      -kx2 * x1 / kx1 + x2 \
  = |    0     ky2/ky1   -ky2 * y1 / ky1 + y2 |
    \    0        0                1          /
现在中心c是这个变换的固定点。即T*c=c。换句话说,它是对应于特征值1的特征向量。这是:

 c = / (-kx2 * x1 + kx1 * x2) / (kx1 - kx2) \
     \ (-ky2 * y1 + ky1 * y2) / (ky1 - ky2) /

position属性是对象的中心还是左上角?对于未知的x0,是否需要解x'=kx*x+x0?或者kx和x0都未知?