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

Math 计算对象的变换,使其与另一个对象对齐,math,rotation,transform,transformation,vectormath,Math,Rotation,Transform,Transformation,Vectormath,假设我有两个矩形,每个矩形都有一个指向特定方向的“连接器”。链接的变换(位置和角度)是相对于其父矩形的中心指定的 在下面的示例中,矩形A的链接是(x:0,y:-0.5,旋转:0),而矩形B的链接是(x:0.5,y:0,旋转:45) 两个矩形可以通过旋转彼此“插入”,使它们的链接具有相同的坐标并面向相反的方向 我试图弄清楚如何计算链接后矩形B相对于矩形A的变换 在本例中,矩形A是(0,0,0),A的链接是(0,0.5,0),B的链接是(0,0.5180),B是(~0.3,~-0.8135) 在上

假设我有两个矩形,每个矩形都有一个指向特定方向的“连接器”。链接的变换(位置和角度)是相对于其父矩形的中心指定的

在下面的示例中,矩形A的链接是(x:0,y:-0.5,旋转:0),而矩形B的链接是(x:0.5,y:0,旋转:45)

两个矩形可以通过旋转彼此“插入”,使它们的链接具有相同的坐标并面向相反的方向

我试图弄清楚如何计算链接后矩形B相对于矩形A的变换

在本例中,矩形A是(0,0,0),A的链接是(0,0.5,0),B的链接是(0,0.5180),B是(~0.3,~-0.8135)


在上面的例子中,有人知道如何计算B的最终位置吗?

所以你有基点
A0
B0
以及链接点
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

请详细说明问题所在。在我看来,你只需要计算所需的旋转,作为连接器旋转的差。然后通过(旋转适应)添加接头位置来确定位置。解释你的尝试和失败的原因。到目前为止,我最好的尝试是计算B连杆的新位置(A连杆旋转180度)。然后通过将新的B的链接旋转与A的链接旋转相加来计算B的旋转(我很确定这就是我出错的地方)。然后计算B的位置,通过刚计算的旋转旋转B,并通过其连杆位置的倒数平移B。这适用于某些设置,但不适用于问题中的设置。我现在将尝试将您所说的转换为代码。请在问题本身中解释所有这些。并显示相应的代码。请记住,这是一个编程问题网站。您需要显示当前/最佳代码,这将使您最接近目标。然后人们会帮忙。但是他们喜欢看第一个。@Omegastick看看如果你把它移植到2D,那就更简单了。我投票把这个问题作为离题题来结束,因为它是关于几何/数学的,而不是直接关于编程/编码/编程工具/软件算法的。