四元数沿球体表面运动的方向性
Directionality of movement along the surface of a sphere with quaternions
我正在使用配备 gyrometer/accelerometer/magnetometer 的运动跟踪设备。设备在任何时间点将其旋转方向作为四元数输出。
当我从其原始方向旋转设备时,我试图计算两件事:(1) 从其原始方向沿球体表面的距离(我实际上已经完成了这一步),以及(2)orientation的方向——但是方向需要是简单的1或者-1,不能是向量。
让我进一步解释一下关于方向的意思:假设设备开始处于初始旋转状态,然后我朝一个方向旋转它。完成一定程度的旋转后,我将它旋转回原来的位置,然后我 继续 沿着相同的轨迹旋转它 - 基本上以与原始旋转相反的方向旋转它。
所以,如果我有一个原始四元数 Q0,然后我有另一个四元数代表我的第一个旋转 Q1,那么我想说 对于任何未来的四元数 Qn:
- Qn 与 Q0 的距离是多少?
- 从 Q0 到 Qn 的方向是什么(有效值为 1 或 -1)?其中“1”是“与从Q0到Q1的旋转方向相同”,“-1”是“与从Q0到Q1的旋转方向相反”。
就像我说的,“距离”部分我已经解决了,多亏了这个有用的 post:https://math.stackexchange.com/questions/90081/quaternion-distance?newreg=f0fcab1eca8d4a4faaad1ea555d1cdf7
我还没有解决方向部分。以下 post 帮助我完成了部分工作:
- Difference between the two quaternions
- 'Difference' between two quaternions
但是我的理解还不完整。谁能帮助阐明我该怎么做?谢谢!
不知道你用的四元数约定是左链还是右链,我就挑一个举例吧。假设 P1 是从 Q0 到 Q1 的四元数,如下所示:
P1 * Q0 = Q1
然后我们有
P1 = Q1 * Q0^-1
如果P1的w部分为负,则翻转P1元素的所有符号,使w部分为正。
If P1w < 0
P1 = -P1
Endif
然后P1剩下的x,y,z部分指向旋转轴,所以我们可以用它来表示“方向”。称此向量为 v1 = [P1x,P1y,P1z]
现在你有另一个四元数 Qn,你想看看它是否与 Q1 处于相同的旋转“方向”。首先按照我们上面的方式生成以下内容:
Pn = Qn * Q0^-1
必要时翻转 Pn 的所有符号以确保 Pnw 为正。
形成向量vn = [Pnx,Pny,Pnz]
如果vn和v1在同一个“方向”,那么旋转也是同一个方向。否则就是相反的方向。即,
If dot(v1,vn) > 0
Direction is the same
Else
Direction is opposite
Endif
当涉及 0 度或 180 度的旋转,或者旋转超过 180 度时,这一切都会崩溃,因此您可能需要特殊的逻辑来处理这些情况。例如,如果 v1 或 vn 非常接近或等于 [0,0,0],您想要什么结果?
对于不同的四元数约定,您可能需要从 Q0 * P1 = Q1 开始
并据此进行。
我正在使用配备 gyrometer/accelerometer/magnetometer 的运动跟踪设备。设备在任何时间点将其旋转方向作为四元数输出。
当我从其原始方向旋转设备时,我试图计算两件事:(1) 从其原始方向沿球体表面的距离(我实际上已经完成了这一步),以及(2)orientation的方向——但是方向需要是简单的1或者-1,不能是向量。
让我进一步解释一下关于方向的意思:假设设备开始处于初始旋转状态,然后我朝一个方向旋转它。完成一定程度的旋转后,我将它旋转回原来的位置,然后我 继续 沿着相同的轨迹旋转它 - 基本上以与原始旋转相反的方向旋转它。
所以,如果我有一个原始四元数 Q0,然后我有另一个四元数代表我的第一个旋转 Q1,那么我想说 对于任何未来的四元数 Qn:
- Qn 与 Q0 的距离是多少?
- 从 Q0 到 Qn 的方向是什么(有效值为 1 或 -1)?其中“1”是“与从Q0到Q1的旋转方向相同”,“-1”是“与从Q0到Q1的旋转方向相反”。
就像我说的,“距离”部分我已经解决了,多亏了这个有用的 post:https://math.stackexchange.com/questions/90081/quaternion-distance?newreg=f0fcab1eca8d4a4faaad1ea555d1cdf7
我还没有解决方向部分。以下 post 帮助我完成了部分工作:
- Difference between the two quaternions
- 'Difference' between two quaternions
但是我的理解还不完整。谁能帮助阐明我该怎么做?谢谢!
不知道你用的四元数约定是左链还是右链,我就挑一个举例吧。假设 P1 是从 Q0 到 Q1 的四元数,如下所示:
P1 * Q0 = Q1
然后我们有
P1 = Q1 * Q0^-1
如果P1的w部分为负,则翻转P1元素的所有符号,使w部分为正。
If P1w < 0
P1 = -P1
Endif
然后P1剩下的x,y,z部分指向旋转轴,所以我们可以用它来表示“方向”。称此向量为 v1 = [P1x,P1y,P1z]
现在你有另一个四元数 Qn,你想看看它是否与 Q1 处于相同的旋转“方向”。首先按照我们上面的方式生成以下内容:
Pn = Qn * Q0^-1
必要时翻转 Pn 的所有符号以确保 Pnw 为正。
形成向量vn = [Pnx,Pny,Pnz]
如果vn和v1在同一个“方向”,那么旋转也是同一个方向。否则就是相反的方向。即,
If dot(v1,vn) > 0
Direction is the same
Else
Direction is opposite
Endif
当涉及 0 度或 180 度的旋转,或者旋转超过 180 度时,这一切都会崩溃,因此您可能需要特殊的逻辑来处理这些情况。例如,如果 v1 或 vn 非常接近或等于 [0,0,0],您想要什么结果?
对于不同的四元数约定,您可能需要从 Q0 * P1 = Q1 开始 并据此进行。