问题: 对象在我的视口内缩放。我知道秤的大小,大小和位置。我不知道扩大的中心-这就是我想要的。
我的数据类型:
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}
因此,给出了两个描述原始大小和缩放对象的大小和位置以及视口大小的变换-如何找到放大的中心。例如,如果对象是从鼠标位置缩放的,如何找出鼠标在体重秤中的位置?
答案 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) /