开始
四元数
https://blog.csdn.net/silangquan/article/details/39008903
实数是一维结合代数,复数是二维结合代数,四元数是四维结合代数,都是可除代数;
- 以i,j,k表示四元数的基元,四元数的一般形式为A = w+xi+yj+zk;(w,x,y,z为实数)基元i,j,k的运算规则为:
i2 = j2 = k2 = -1
i * j = k = -j * i
j * k = i = -k * j
k * i = j = -i * k
i,j,k可代表沿x,y,z轴的单位矢量,四元数是标量w与矢量V=xi+yj+zk之和。 - 表示方法
q=d+ai+bj+ck,其中a,b,c,d是实数,i,j,k是虚数;
q=[w,v], 其中v=(x,y,z)是矢量,w是标量;
q=(cos@/2), (x,y,z)sin@/2)
q=[d,a,b,c]T - 加法
q1 + q2 = (w1+w2) + (x1+x2) i + (y1+y2) j + (z1+z2) k - 乘法称为直乘:
A * B=(w1+x1i+y1j+z1k)(w2+x2i+y2j+z2k)
=w1w2-x1x2-y1y2-z1z2+(w1x2+x1w2+y1z2-z1y2)i……… - 求范数
||q|| = ( x2 + y2 + z2 + w2 ) - 求模
N(q) = |q| = ( x2 + y2 + z2 + w2 )0.5 - 单位化
Normalize( q ) = q/ | q | - 求共轭
q*=(-x, -y, -z, w) - 求逆
q-1=q*/||q||
应用
- 用四元数旋转矢量
给定一个矢量v,再给定一个旋转的单位四元素q,让v旋转q。
首先将v改写成四元数的形式v=(x,y,z,0),接下来要旋转v需用q前乘以矢量v,再后乘以q-1。 v’ = qvq-1 。
对于旋转多个四元数,注意顺序。v’ = q3q2q1vq3-1q2-1q1-1。 - 设四元数是 xi+yj+zk+w,那么旋转角度和旋转轴(a,b,c)是:
angle = 2 * acos(w)
a = x / sqrt(1-ww)
b = y / sqrt(1-ww)
c = z / sqrt(1-w*w) - 四元数的线性插值和球面线性插值
- 四元数转欧拉角、旋转矩阵