计算对象的变换,使其与另一个对齐

Calculate transform of object, to make it line up with another

假设我有两个矩形,每个矩形都有一个 'connector' 指向某个方向。 link 的变换(位置和角度)是相对于其父矩形的中心指定的。

在下面的示例中,矩形 A 的 link 是 (x: 0, y: -0.5, rotation: 0),而 B 的是 (x: 0.5, y: 0, rotation: 45)。

两个矩形可以 'plug in' 通过旋转使它们的 link 具有相同的坐标并且朝向相反的方向。

我想弄清楚如何计算矩形 B 相对于矩形 A 在 linked 后的变换。

在这种情况下,矩形 A 是 (0, 0, 0),A 的 link 是 (0, 0.5, 0),B 的 link 是 (0, 0.5, 180) 和B 是 (~0.3, ~-0.8, 135).

有谁知道上面例子中B的最终位置是如何计算的?

所以你有基点A0B0和link点ALBL

首先你将 B0 移动 ALBL,所以

B0' = B0 + AL - BL

然后你必须围绕AL旋转这个点以提供最终位置

B0''.X = AL.X + (B0.X - BL.X) * Cos(D) - (B0.Y - BL.Y) * Sin(D)
B0''.Y = AL.Y + (B0.X - BL.X) * Sin(D) + (B0.Y - BL.Y) * Cos(D)

其中D是旋转角度

D = Pi - A_rotation - B_rotation