将单位向量转换为四元数

6
我对四元数很陌生,但我了解如何使用它们进行操作的基础知识。目前我想做的是将已知的四元数与空间中的两个绝对点进行比较。我希望能够将这些点简单地转换为第二个四元数,从而方便地进行比较。
到目前为止,我已经将这两个点转换成了一个单位向量。然后我希望直接将 i j k 插入虚部,并用零作为标量插入到四元数中。之后,我可以将一个四元数乘以另一个四元数的共轭,得到第三个四元数。这个第三个四元数可以转换成一个轴角,从而给出原始两个四元数之间的差异度数。
这个思路正确吗?所以应该只是 [ 0 i j k ]。之后可能需要对四元数进行归一化,但我不确定。
我有一种不好的预感,这不是从向量到四元数的直接映射。我尝试将单位向量转换为轴角,但我不确定这是否可行,因为我不知道要输入什么角度。

1
这可能更适合发布在http://math.stackexchange.com/或http://physics.stackexchange.com/。据我所知(非常有限!),四元数是4D复数,用于描述旋转。对我来说,它们与向量的关系并不明显。 - Daniel Farrell
你是否尝试使用四元数来表示旋转?如果不是,请明确你想要表示什么,因为比较位置向量更适合。顺便说一句,将向量和角度的元组转换为四元数很容易,方位角和俯仰角转换为四元数也很容易。 - Theraot
1个回答

1

表示法

四元数定义在一个由基向量{1, i, j, k}组成的四维空间中。Hamilton将基本关系刻在都柏林的布罗姆桥上:

i2 = j2 = k2 = i j k= -1。

有许多等效的四元数参数化方法,但这里使用标量和向量形式。

1.) A = {a0, a} 以及 B = {b0, b},其中 A 和 B 是四元数,a0 和 b0 是标量,ab 是三维向量。

2.) X = {0,x} 是一个向量四元数

3.) (非交换的) 四元数积 直接源于上述i、j和k的属性,A⊗B = {a0 b0 - a.b, a0 b + b0 a + a x b}

4.) 四元数共轭 是 A* = {a0, -a}

5.) 四元数积的共轭 是反向顺序的共轭积。 (A⊗B)* = B*⊗A*

6.) 向量四元数的共轭 是其负数。 X* = {0, -x} = -X

7.) 四元数范数 是 |A| = √(A⊗A*) = √( a0² + a.a )

8.) 单位四元数的范数为1。

9.) 满足x . x = 1的三维单位向量x = {x1, x2, x3}可以表示为一个单位向量四元数X = {0, x}, |X| = 1。

10.) 绕着单位向量轴n旋转角度θ的四元数向量X的球面旋转是Q⊗X⊗Q*,其中Q是四元数{cos(θ/2), sin(θ/2) n}。注意,|Q| = 1。

注意四元数向量积的形式。给定向量四元数 X1 = { 0, x1 ) 和 X2 = { 0, x2 },四元数积为 X2⊗X1* = { x1.x2, x1 × x2 }。四元数将点积作为标量部分和叉积作为向量部分重新组合在一起,这两个积已经分离了一百多年。这些积中没有一个是可逆的,但四元数可以按照下面的方式进行。

反演

找到球面变换四元数 Q12,以使向量 X1 旋转并与向量 X2 对齐。

从上面得到

X2 = Q12⊗X1⊗Q12*

将两边乘以X1*

X2⊗X1*=Q12⊗X1⊗(Q12*⊗X1*)

请记住,旋转轴n源于叉积x1×x2,因此n.x1=0。而且Q*⊗X*=(X⊗Q)*=X*⊗Q,留下

X2⊗X1* = Q12⊗X1⊗X1*⊗Q12 = Q12⊗Q12

因此,四元数变换可以直接解决为:

Q12 = √(X2⊗X1*)

对于四元数平方根,需要自行解决。有很多方法可供选择,最佳方法将取决于您的应用程序,考虑速度和稳定性。

--祝好,
Fred Klingener


(X⊗Q)* = X⊗Q是错误的,以X=j和Q=i+j为例,那么X⊗Q=-k-1,(X⊗Q)=-1+k,X*⊗Q=-(-k-1)=1+k。 - Lutz Lehmann
因为四元数变换Q12的向量部分是矢量旋转的轴,所以它与X1和X2互相垂直。因此,在该约束条件下进行适当的演示可能是X = j和Q = i + k(对于演示来说,Q不是单位四元数并不重要)。Q* ⊗ X* = - i + k,最终结果形式为X* ⊗ Q = - i + k。 - Fred Klingener
好的,这并不像看起来那么普遍。但是你不需要一般的平方根,X2⊗X1*=X1⊗X2=C+Sn,其中C=<X1,X2>是标量积,Sn=X1×X2是叉积,S>=0是叉积的模。根据先前的步骤和假设,Q=D+Tn,因此Q⊗Q=(D²-T²)+2DTn,这意味着(D,T)是(C,S)的半角点,即D=√(0.5(1+C)),T=√(0.5*(1-C))。 - Lutz Lehmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接