将单位矢量转换为四元数

Hmm*_*Hmm 6 axis vector angle quaternions

所以我对四元数很新,但我理解如何用它们操作东西的基础知识.我目前要做的是将已知的四元数与空间中的两个绝对点进行比较.我希望我能做的只是将点转换成第二个四元数,让我有一个简单的方法来比较两者.

到目前为止我所做的是将这两个点转换为单位向量.从那里我希望我可以直接将ijk插入四元数的虚部,标量为零.从那里我可以将一个四元数乘以另一个四元数,得到第三个四元数.这个第三个四元数可以转换成轴角,给出原始两个四元数相差的程度.

这个思维过程是否正确?所以它应该只是[0 ijk].之后我可能需要规范化四元数,但我不确定.

我有一种不好的感觉,它不是从向量到四元数的直接映射.我试着将单位矢量转换为轴角度,但我不确定这会起作用,因为我不知道作为输入给出的角度.

Fre*_*ner 1

符号

四元数在基数为 {1, i, j, k} 的四空间中定义。汉密尔顿将这一基本关系刻在都柏林布鲁厄姆桥的石头上:

i 2 = j 2 = k 2 = ijk = -1。

有许多等效的四元数参数化,但在这里我将使用 {scalar, vector } 形式。

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

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

3.) (非交换)四元数乘积直接从上面 i、j 和 k 的属性导出,A⊗B = {a0 b0 - ab , 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 2 , x 3 } 且xx = 1 可表示为单位向量四元数X = { 0, x }, |X| = 1。

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

注意四元数向量积的形式。给定向量四元数 X 1 = { 0, x 1 ) 和 X 2 = { 0, x 2 },四元数乘积为 X 2 ⊗X 1 * = { x 1x 2 , x 1 × x 2 }。四元数将点积重新统一为标量部分,将叉积重新统一为矢量部分,这两个概念在一百多年前就已经分开了。这些乘积都不是可逆的,但四元数的方式如下所述。

反转

找到球面变换四元数 Q 12以旋转矢量 X 1与矢量 X 2对齐。

从上面

X 2 = Q 12 ⊗X 1 ⊗Q 12 *

两边同时乘以 X 1 *

X 2 ⊗X 1 * = Q 12 ⊗X 1 ⊗(Q 12 * ⊗X 1 * )

请记住,旋转轴n来自叉积x 1 × x 2,因此nx 1 = 0. 且 Q * ⊗X * = (X⊗Q) * = X * ⊗Q,留下

X 2 ⊗X 1 * = Q 12 ⊗X 1 ⊗X 1 * ⊗Q 12 = Q 12 ⊗Q 12

所以四元数变换可以直接求解为

Q 12 = √(X 2 ⊗X 1 * )

您需要自己计算四元数的平方根。有很多方法可以做到这一点,最好的方法取决于您的应用程序,考虑速度和稳定性。

——弗莱德·
克林格纳