6

所以我对四元数很陌生,但我了解如何用它们操作东西的基础知识。我目前正在尝试做的是将已知四元数与空间中的两个绝对点进行比较。我希望我能做的就是简单地将这些点转换为第二个四元数,给我一个简单的方法来比较两者。

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

这个思维过程正确吗?所以它应该只是[0 ijk]。之后我可能需要对四元数进行归一化,但我不确定。

我有一种不好的感觉,它不是从向量到四元数的直接映射。我尝试将单位向量转换为轴角度,但我不确定这是否可行,因为我不知道要给出什么角度作为输入。

4

1 回答 1

1

符号

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

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

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

1.) A = {a0, a } and 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 * )

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

——hth,
弗雷德·克林格纳

于 2014-05-01T19:10:37.187 回答