如何同步四元数表示的具有相同方向的两个点的位置?
How to synchronize the position of two points with the same orientation represented in quaternion?
我有两个距离固定(例如 30 厘米)且 3D 方向完全相同的点 space。点 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,但我仍然不知道如何解决它。我想我没有正确定义问题,所以我无法找到正确的数学解决方案。谢谢!
根据我对你问题的理解,你有两个粒子 P1 和 P2,它们之间有 刚性变换(始终是 P1 和 P2 之间的相对位置和相对方向是常数)。
答案与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构成的旋转矩阵。请参阅我上面发布的 link,了解如何在没有 C(q) 函数的情况下执行此操作。
对于funsies,在P2之间具有刚性变换的任何粒子P3的位置和方向非常相似:
p3 = p2 + C(q2)*p23
q3 = q2 ⊗ q23
编辑:我添加了一个图形和动画来尝试解释相对位置和方向,尽管这很难做到,所以我只展示了只有 (x, y) 和旋转的 2D 情况关于 z 轴。同样的概念适用于 3d,但更难可视化。
你必须知道P1和P2在父框架中表达的相对位置,以及相对方位。或者,您可以通过了解每个粒子 在全局框架 中的初始位置和方向来解决这些问题,但这对于四元数来说更加困难。相对位置相当简单,但方向需要一些努力。首先找到使 P1 轴与 P2 轴对齐的欧拉角旋转序列。然后使用一些库来转换 Euler-> 四元数。
我有两个距离固定(例如 30 厘米)且 3D 方向完全相同的点 space。点 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,但我仍然不知道如何解决它。我想我没有正确定义问题,所以我无法找到正确的数学解决方案。谢谢!
根据我对你问题的理解,你有两个粒子 P1 和 P2,它们之间有 刚性变换(始终是 P1 和 P2 之间的相对位置和相对方向是常数)。
答案与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构成的旋转矩阵。请参阅我上面发布的 link,了解如何在没有 C(q) 函数的情况下执行此操作。
对于funsies,在P2之间具有刚性变换的任何粒子P3的位置和方向非常相似:
p3 = p2 + C(q2)*p23
q3 = q2 ⊗ q23
编辑:我添加了一个图形和动画来尝试解释相对位置和方向,尽管这很难做到,所以我只展示了只有 (x, y) 和旋转的 2D 情况关于 z 轴。同样的概念适用于 3d,但更难可视化。
你必须知道P1和P2在父框架中表达的相对位置,以及相对方位。或者,您可以通过了解每个粒子 在全局框架 中的初始位置和方向来解决这些问题,但这对于四元数来说更加困难。相对位置相当简单,但方向需要一些努力。首先找到使 P1 轴与 P2 轴对齐的欧拉角旋转序列。然后使用一些库来转换 Euler-> 四元数。