计算对象的变换,使其与另一个对齐
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的最终位置是如何计算的?
所以你有基点A0
和B0
和link点AL
和BL
首先你将 B0
移动 AL
和 BL
,所以
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
假设我有两个矩形,每个矩形都有一个 '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的最终位置是如何计算的?
所以你有基点A0
和B0
和link点AL
和BL
首先你将 B0
移动 AL
和 BL
,所以
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