图形学的数学基础(十一):矩阵进阶(下)

313 阅读2分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

图形学的数学基础(十一):矩阵进阶(下)

本章是深入矩阵的下半部分,将详细介绍正交矩阵,矩阵的正交化,齐次矩阵。

正交矩阵(Orthogonal  MatrixOrthogonal\;Matrix

数学定义

当且仅当矩阵及其转置的乘积是单位矩阵时,方形矩阵M\textbf{M}是正交的。定义如下:

M是正交矩阵<=>MMT=IM是正交矩阵 <=> \textbf{M}\textbf{M}^T = \textbf{I}

根据上一章逆矩阵的定义,矩阵与其逆相乘等于单位矩阵(MM1=I\textbf{M}\textbf{M}^{-1} = \textbf{I}),因此,如果矩阵是正交的,则其转置矩阵和逆矩阵是相等的。

M是正交矩阵<=>MT=M1M是正交矩阵 <=> \textbf{M}^T = \textbf{M}^{-1}

利用正交矩阵的这一特性,我们可以轻易的得到矩阵的逆,只要证明其是正交矩阵即可,这样就避免了复杂的的逆矩阵计算过程(使用转置矩阵即可)。图形学中有很多正交矩阵,例如旋转矩阵和反射矩阵都是正交的。

几何解释

在许多情况下,我们可能获得有关矩阵构造方式的信息,因此可以先验地知道矩阵仅包含旋转或反射。但是如果在我们事先对矩阵一无所知的情况下,如何判断矩阵的正交性呢?

根据正交矩阵的定义可知:

M是正交矩阵<=>MMT=IM是正交矩阵 <=> \textbf{M}\textbf{M}^T = \textbf{I}

[m11m12m13m21m22m23m31m32m33][m11m21m31m12m22m32m13m23m33]=[100010001]\begin{bmatrix}m_{11}&m_{12}&m_{13}\\ m_{21}&m_{22}&m_{23}\\ m_{31}&m_{32}&m_{33}\end{bmatrix}\begin{bmatrix}m_{11}&m_{21}&m_{31}\\ m_{12}&m_{22}&m_{32}\\ m_{13}&m_{23}&m_{33}\end{bmatrix} = \begin{bmatrix}1&0&0\\ 0&1&0\\ 0&0&1\end{bmatrix}

设以下矢量r1,r2,r3\mathbf{r_1},\mathbf{r_2},\mathbf{r_3}代表M\textbf{M}的行:

M=[r1r2r3]\textbf{M} = \begin{bmatrix}-&r_1&-\\ -&r_2&-\\ -&r_3&-\\ \end{bmatrix}

简化上述矩阵和转置相乘的表达式可得:

r1r1=1            r1r2=0            r1r3=0\mathbf{r_1}\cdot\mathbf{r_1} = 1\;\;\;\;\;\;\mathbf{r_1}\cdot\mathbf{r_2} = 0\;\;\;\;\;\;\mathbf{r_1}\cdot\mathbf{r_3} = 0

r2r1=0            r2r2=1            r2r3=0\mathbf{r_2}\cdot\mathbf{r_1} = 0\;\;\;\;\;\;\mathbf{r_2}\cdot\mathbf{r_2} = 1\;\;\;\;\;\;\mathbf{r_2}\cdot\mathbf{r_3} = 0

r3r1=0            r3r2=0            r3r3=1\mathbf{r_3}\cdot\mathbf{r_1} = 0\;\;\;\;\;\;\mathbf{r_3}\cdot\mathbf{r_2} = 0\;\;\;\;\;\;\mathbf{r_3}\cdot\mathbf{r_3} = 1

通过上述式子我们推导出正交矩阵需要满足以下几个条件:

  1. 当且仅当矢量为单位矢量时,矢量与自身的点积才为1。 因此r1,r2,r3\mathbf{r_1},\mathbf{r_2},\mathbf{r_3}为单位矢量。即矩阵的每一行必须是单位矢量。
  2. 当且仅当两个矢量相互垂直时,点积才为0, 因此r1,r2,r3\mathbf{r_1},\mathbf{r_2},\mathbf{r_3}相互垂直,即矩阵的行相互垂直。

结论: 当且仅当矩阵每一行都为单位矢量且相互垂直的矩阵才是正交矩阵。可以对矩阵的列做同样的描述。因为如果M\textbf{M}是正交的,MT\textbf{M}^T必然也是正交的。

矩阵的正交化

用于构造一组标正交基矢量的标准算法是GramSchmidtGram-Schmidt正交化。基本思想是按顺序遍历基矢量。对每个基矢量,减去与基向量平行的矢量,这必然会产生垂直矢量,具体推导细节可以参考之前的文章施密特正交化

Gram-Schmidt{v1=x1v2=v=x2x=x2x2.v1v1.v1v1v3=x3k1v1^k2v2^=x3x3.v1^v1^.v1^v1^x3.v2^v2^.v2^v2^\textbf{Gram-Schmidt}\begin{cases} \vec{v_1} = \vec{x_1}\\ \vec{v_2} = \vec{v_∥} = \vec{x_2} - \vec{x_⊥} = \vec{x_2} - \dfrac{\vec{x_2}.\vec{v_1}}{\vec{v_1}.\vec{v_1}}\vec{v_1}\\ \vec{v_3} = \vec{x_3} - k_1\hat{v_1} - k_2\hat{v_2} = \vec{x_3} - \dfrac{\vec{x_3}.\hat{v_1}}{\hat{v_1}.\hat{v_1}}\hat{v_1} - \dfrac{\vec{x_3}.\hat{v_2}}{\hat{v_2}.\hat{v_2}}\hat{v_2} \end{cases}