如何使用四元数中表示的相同方向同步两个点的位置?

时间:2015-01-28 00:33:00

标签: translate quaternions

我有两个固定距离(例如30厘米)的点和3D空间中完全相同的方向。点1(x1,y1,z1)的位置和点1的方向(以四元数q0,q1,q2,q3表示)是已知的。如何计算第2点的位置? (无论我如何移动它们,它们之间的距离都不会改变,方向也会一直相同)

我在网上搜索过,这是我能找到的最接近的问题https://www.opengl.org/discussion_boards/showthread.php/173480-Calculate-object-orientation-from-a-quaternion,但我仍然无法弄清楚如何解决它。我想我没有正确定义问题,因此我无法找到正确的数学解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

根据我对你的问题的理解,你有两个粒子P1和P2,它们之间有一个刚性变换(在任何时候P1和P2之间的相对位置和相对方向都是不变的)。< / p>

Rigid Body Mechanics 2D Animation

答案类似于this answer,但它有点不同。

假设你的两个粒子位置是p1和p2,第一个粒子的旋转是q1 = [w1,x1,y1,z1]。 P1和P2之间的相对四元数取向是 q12 ,相对位置是 p12 = p2 - p1 。然后:

p2 = p1 + C(q1)*p12
q2 = q1 ⊗ q12

其中⊗是四元数乘法运算符,C( q1 )是由 q1 形成的旋转矩阵。如果没有C( q )函数,请参阅我上面发布的关于如何执行此操作的链接。

对于测试,在P2之间具有刚性变换的任何粒子P3的位置和方向非常相似:

p3 = p2 + C(q2)*p23
q3 = q2 ⊗ q23
编辑:我添加了一个图形和动画来尝试解释相对位置和方向,尽管很难做到,所以我只展示了只有(x,y)和旋转的2D情况。 z轴。同样的概念适用于3d,但它更难以可视化。

您必须知道父框架中表达的P1和P2 之间的相对位置,以及相对方向。或者你可以通过知道全局框架中每个粒子的初始位置和方向来解决这些问题,但这对四元数来说更难。相对位置相当简单,但方向需要一些努力。首先找到欧拉角旋转序列,使P1轴与P2轴对齐。然后使用一些库来转换Euler-&gt;四元数。

Rigid Body Mechanics 2D Illustration