给定两个变换(放大中心),找到比例中心(在视口内)

时间:2018-10-03 12:59:16

标签: math geometry scaling

问题: 对象在我的视口内缩放。我知道秤的大小,大小和位置。我不知道扩大的中心-这就是我想要的。

我的数据类型:

 public class InfoPointingCannotBeSixOurLater : ISpecification<InfoPointing >
{
    public bool IsSatisfiedBy(InfoPointing infopointing)
    {   
        return DateTime.Now.Hour - infopointing.Dateregister.Hour>=6;
    }
}

x,y =>对象到视口原点的偏移量

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

我拥有的数据:

transform t =  {x: 0, y: 0, kx: 1, ky: 1}

因此,给出了两个描述原始大小和缩放对象的大小和位置以及视口大小的变换-如何找到放大的中心。例如,如果对象是从鼠标位置缩放的,如何找出鼠标在体重秤中的位置?

1 个答案:

答案 0 :(得分:1)

我们有变换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) /