欧拉角
引用博客欧拉角与旋转矩阵的转换关系
欧拉角就是我们日常生活中常用的表示旋转的三维向量的乘积。
在Unity中,用zxy的顺序来表示旋转,即选旋转z轴、x轴、y轴的方式来表示旋转。在给出逆时针旋转的角度为正时(与右手系旋转方向相同的为旋转正方向),绕不同轴的旋转的矩阵表示:
按照不同轴进行旋转的时候,乘以相应的矩阵即可。
例如:依次按照x-y-z轴的顺序进行分别旋转特定的角度
ψ
\psi
ψ、
ϕ
\phi
ϕ、
θ
\theta
θ 。旋转矩阵为:
万向锁
在欧拉角的旋转计算过程中,会发生两个坐标系重合,然后欧拉角描述的旋转会丧失旋转维度的现象
如图所示:
四元数
引用博客四元数——基本概念
引用博客如何形象地理解四元数?
参考视频奇妙的四元数与空间旋转
我们将二维空间表示为(x,y),当y=0时,其实可以看成是一维的,只不过它表示成(x,0)这种形式。推到四维,(w,x,y,z),当w=0时,(0,x,y,z)就是一个三维子空间,这也是为什么我们可以用单位四元数对三维向量进行操作,其实我们是将三维向量映射到四维的三维子空间(w=0,这种形式也成纯四元数),然后对其进行旋转,最终得到的向量结果依然是这个三维子空间中的,因而可以映射回三维空间。
四元数的表达式为:
q
=
w
+
x
i
+
y
j
+
z
k
q=w+xi+yj+zk
q=w+xi+yj+zk
其中,
i
2
=
j
2
=
k
2
=
i
j
k
=
−
1
i^2=j^2=k^2=ijk=-1
i2=j2=k2=ijk=−1
所以,四元数原本是用来描述在四维空间中的点的位置,可以用来描述四维空间中的旋转,也可以用来描述子空间(三维空间)的旋转。
所以可以用纯四元数来描述三维空间中的点。表达式为:
q
w
=
(
0
,
w
x
,
w
y
,
w
z
)
qw = (0,wx,wy,wz)
qw=(0,wx,wy,wz)
如果你想算一个点在这个旋转下新的坐标,需要进行如下操作,
1.定义纯四元数
2.进行四元数运算
3.产生的 q w ′ qw^{'} qw′一定是纯四元数,也就是说它的第一项为0,有如下形式:
4. q w ′ qw^{'} qw′中的后三项就是:、
这样,就完成了一次四元数旋转运算。
同理,如果你有一个四元数:
那么,它对应一个以向量
v
=
(
v
x
,
v
y
,
v
z
)
v=(vx,vy,vz)
v=(vx,vy,vz)为轴,旋转角度
θ
\theta
θ的旋转操作(右手法则的旋转)。
里面用的是
θ
2
\frac{\theta}{2}
2θ而不是
θ
\theta
θ。这是因为
q
q
q做的就是一个
θ
2
\frac{\theta}{2}
2θ的旋转,而
q
′
q^{'}
q′也做了一个
θ
2
\frac{\theta}{2}
2θ的旋转。我们进行了两次旋转,而不是一次,这两次旋转的结果是一个旋转角为
θ
\theta
θ的旋转。
示意图:
四元数的矩阵乘法及其可易性
引用文章四元数矩阵的乘法及其可易性
蜕变矩阵
已知矩阵 P P P的运算如下,
四元数的矩阵乘法
所以,如果有两个四元数
q
1
=
a
+
b
i
+
c
j
+
d
k
q_1=a+bi+cj+dk
q1=a+bi+cj+dk和
q
2
=
e
+
f
i
+
g
j
+
h
k
q_2=e+fi+gj+hk
q2=e+fi+gj+hk
那么它们的乘积为
同理, q 2 q_2 q2与 q 1 q_1 q1的乘积为