在图形学,3D视觉等领域,矩阵变换是在常见不过的一种操作,而旋转变换又是其中尤其特别的一种,我们在玩游戏时,移动鼠标看向不同地方就是在进行三维旋转;我们看到的动画电影中角色变换的身姿也是通过三维旋转实现的。因此,深入理解3维空间的旋转至关重要。
Matrix Transformation of Vector(向量的矩阵变换)
空间中的方向,位置都可以通过矩阵进行变换, v ′ = M v \bold{v}'=M\bold{v} v′=Mv,旋转也不例外,想让物体在三维空间中旋转,本质上也是通过将位置乘上一个旋转矩阵的来的。
Basis(基底)
在深入探究旋转矩阵前,可以先理解下矩阵在几何领域的含义:
变换矩阵 M M M的每一列都是一个基向量, M = [ e 1 e 2 e 3 ] M=\begin{bmatrix} \bold{e_1}&\bold{e_2}&\bold{e_3} \end{bmatrix} M=[e1e2e3],它们组成了一个本地坐标系,对于任意一个向量,我们都可以将其写作本地坐标系下的坐标。
若我们有两个本地坐标系 M 1 = [ u 1 u 2 u 3 ] M_1=\begin{bmatrix} \bold{u_1}&\bold{u_2}&\bold{u_3} \end{bmatrix} M1=[u1u2u3], M 2 = [ v 1 v 2 v 3 ] M_2=\begin{bmatrix} \bold{v_1}&\bold{v_2}&\bold{v_3} \end{bmatrix} M2=[v1v2v3],我们希望将一个用本地坐标系 M 1 M_1 M1表示的点坐标 p 1 \bold{p}_1 p1用本地坐标系 M 2 M_2 M2表示,我们需要先将其转换到全局坐标系下,再转换到 M 2 M_2 M2。列举所有情况如下:
- L 1 → W → L 2 L_1\to{W}\to{}L_2 L1→W→L2: p 2 = M 2 − 1 M 1 p 1 \bold{p}_2=M_2^{-1}M_1\bold{p}_1 p2=M2−1M1p1
- W → L 2 {W}\to{}L_2 W→L2: p 2 = M 2 − 1 p g l o b a l \bold{p}_2=M_2^{-1}\bold{p}_{global} p2=M2−1pglobal
- L 1 → W L_1\to{}W L1→W: p g l o b a l = M 1 p 1 \bold{p}_{global}=M_1\bold{p}_{1} pglobal=M1p1
3B1B就矩阵的几何解释做了很多期相关视频,有兴趣的同学可以去看看 https://www.bilibili.com/video/BV1ib411t7YR/?spm_id_from=333.337.search-card.all.click&vd_source=aac7fb9ff30051b45d68db048d45e689。
3D Rotation
Rotation Matrix
话说回旋转矩阵,旋转变换矩阵较为特殊,旋转矩阵 R R R都是正交矩阵(orthogonal matrix),即 R T = R − 1 , det ( R ) = 1 R^T=R^{-1}, \det(R)=1 RT=R−1,det(R)=1。 R = [ e 1 e 2 e 3 ] R=\begin{bmatrix} \bold{e_1}&\bold{e_2}&\bold{e_3} \end{bmatrix} R=[e1e2e3] 的基向量是互相垂直的(点积为 0),并且模长都为 1。
Rodrigues’ rotation formula(罗德里格斯旋转公式)
在三维情况下,若我们知道旋转轴向量,可以使用罗德里格斯旋转公式绕任意轴旋转。
假设我们现在有单位向量 w ∈ R 3 \bold{w}\in\mathbb{R}^3 w∈R3有 w ⊤ = [ w x , w y , w z ] \bold{w}^\top=[w_x,w_y,w_z] w⊤=[wx,