文章目录
LearnGL - 学习笔记目录
本人才疏学浅,如有什么错误,望不吝指出。
上些篇:
- LearnGL - 06 - Matrix - 矩阵01 - 齐次坐标、缩放、旋转矩阵,了解了矩阵就是定义一个坐标空间的轴向
- LearnGL - 06.1 - Matrix - 矩阵02 - 向量空间、向量空间的维度、为何矩阵乘法要有 [M x N] * [N * P] 的 N 要相等的限制,了解了一些矩阵的乘法的维度限制
这一篇:了解 行列式(determinant)、逆矩阵(inverse)、伴随矩阵(adjugate、adjoint)、余子式(cofactor、minor)、代数余子式(algebraic cofactor、minor)。
逆矩阵-inverse matrix
在计算机3D图形学中,在实现一些特殊功能的时候,特别是一些坐标还原,或重构成其他坐标时,都可能会用到逆矩阵。
一个变换矩阵可以将我们传入的向量(组)变换到此变换矩阵中的另一个坐标系中,如果我们要撤销这些变换呢,那么就需要逆过来变换,这个逆变换的矩阵,就叫:逆矩阵。
我们都知道,标量乘以标量,如: 1 × n = n 1 \times n = n 1×n=n,就是1乘以任意数,等于那个数的本身。
同样在矩阵中也有类型的,如: I ⋅ M = M I\cdot M=M I⋅M=M, I I I是单位矩阵(左上角到右下角都是1,其余都是0的方阵)乘以任意矩阵都等于那个矩阵的本身。
1 × n = n 1 \times n = n 1×n=n,同是 1 n ⋅ n = 1 \frac{1}{n}\cdot n=1 n1⋅n=1,而这个 1 n \frac{1}{n} n1就是n的倒数。
同样的也有: M − 1 ⋅ M = M ⋅ M − 1 = I M^{-1}\cdot M=M \cdot M^{-1}=I M−1⋅M=M⋅M−1=I,而这其中的 M − 1 M^{-1} M−1就是 M M M的逆矩阵。
在求逆矩阵时,需要用到行列式的功能。
行列式-determinant
先来讲一下,determinant - 矩阵行列式(这里我觉得中文翻译的理解不好),为啥要一个“式”字结尾,感觉会误导很多人,可以参考这篇文章的讲解:行列式determinant到底是个啥?,其实 determinant 就是求一个矩阵的N个轴(N个列向量,N>0,范围:1,2,…,n)围起来的空间大小(一维)、面积(二维)、体积(三维)、无法描述的变换空间大小(大于三维),最终的值是一个标量,注意:行列式结果是一个标量,并不是什么式子、也不是向量。
所以可以理解,它就是表述一个变换的基的包围空间的大小。
变换:
- 一维中,假设一个2,就是可以把某个东西可以变大2倍的变换数值,它的determinant就是2,长度。
- 二维中,假设 x → ( 0.5 , 0 ) y → ( 0 , 2 ) \overrightarrow x(0.5,0) \overrightarrow y(0,2) x(0.5,0)y(0,2),就是可以让一个存在于二维下的数值对象(a,b)可以让它在 x → ( 0.5 , 0 ) y → ( 0 , 2 ) \overrightarrow x(0.5,0) \overrightarrow y(0,2) x(0.5,0)y(0,2) 的变换后的结果: [ x → y → ∣ ∣ ] ⋅ ( a b ) → [ 0.5 0 0 2 ] ⋅ ( a b ) = ( 0.5 ⋅ a 2 ⋅ b ) \begin{bmatrix} \overrightarrow x & \overrightarrow y\\ |&| \end{bmatrix} \cdot \left(\begin{matrix}a\\b\end{matrix}\right) \rightarrow \begin{bmatrix} 0.5 & 0 \\ 0 & 2 \end{bmatrix} \cdot \left(\begin{matrix}a\\b\end{matrix}\right) = \left(\begin{matrix}0.5\cdot a\\2\cdot b\end{matrix}\right) [x∣y∣]⋅(ab)→[0.5002]⋅(ab)=(0.5⋅a2⋅b),相当于把a缩小一倍,b放大一倍。它的determinant就是0.5*2=1面积。
- 同理三维中的是体积。
但上面都是比较理想的变换矩阵,就是他们的每列向量之间都是垂直的(正交的)所以求他们围起来空间,直接向量它们的向量长度就可以了。
但是如果他们不是垂直的(正交的),这个时候就需要将每个轴之间x,y,z分量上有参差的量围成的空间给减去,才能得到最终的空间。

如上图,a(a1,a2),b(b1,b2)向量就是不互相垂直的,黄色就是a(a1,a2)与b(b1,b2)向量x,y分量上参差的分量围起来的面积,着黄色部分的面积就是整个长方形需要减去的面积,最终得到的面积就是a,b向量围起来的平行四边形的面积。
也可以从百度百科中的:矩阵行列式的公式: d e t ( a b c d ) = a d − b c det\left(\begin{matrix} a & b \\ c & d \end{matrix}\right) =ad-bc det(acbd)=ad−bc 来发现一些线索。
如果b,c为零呢? d e t ( a b c d ) = a d − b c → d e t ( a 0 0 d ) = a d − 0 = a d det\left(\begin{matrix} a & \color{#ff0000}b \\ \color{#ff0000}c & d \end{matrix}\right) =ad-{\color{#ff0000}bc}\rightarrow det\left(\begin{matrix} a & \color{#ff0000}0 \\ \color{#ff0000}0 & d \end{matrix}\right) =ad-{\color{#ff0000}0}=ad det(acbd)=ad−bc→det(a00d)=ad−0=ad,那就是向量(a,0)与向量(0,d)垂直了,前者平行于x轴,后者平行于y轴,这时面积就等于ad了,如下图


所以 行列式就是求变换矩阵的轴包围的一个空间大小,只不过在这个二维空间单位是面积,三维就是体积了,一维就是长度。
假设有矩阵A: [ a b c d ] \begin{bmatrix} a & b\\ c & d \end{bmatrix} [acbd]
det(A),或是矩阵A的行列式 又或是记作 ∣ A ∣ |A| ∣A∣,那么: d e t ( A ) = ∣ A ∣ = a d − b c det(A)=|A|=ad-bc det(A)=∣A∣=ad−bc
那么矩阵A的逆矩阵,记作 A − 1 A^{-1} A−1,那么 A − 1 = 1 ∣ A ∣ ⋅ [ d − b − c a ] = 1 a d − b c ⋅ [ d − b − c a ] A^{-1}=\frac{1}{|A|}\cdot\begin{bmatrix}d & -b \\ -c & a\end{bmatrix}=\frac{1}{ad-bc}\cdot\begin{bmatrix}d & -b \\ -c & a\end{bmatrix} A−1=∣A∣1⋅[d−c−ba]=ad−bc1⋅[d−c−ba]
暂且我们不管这个矩阵 [ d − b − c a ] \begin{bmatrix}d & -b \\ -c & a\end{bmatrix} [d−c−ba]是怎么来的,它看起来就像是a与d交换,b,c添加负数了。这个矩阵叫作:伴随矩阵。后面再详细的搬运一波内容。
这个是2X2矩阵的逆矩阵,我们可以验证一下:
那么继续逆矩阵的内容
有一个矩阵A:
A = [ a b c d ] = [ 8 − 2 4 6 ] A=\begin{bmatrix}a & b \\ c & d\end{bmatrix}=\begin{bmatrix}8 & -2 \\ 4 & 6\end{bmatrix} A=[acbd]=[84−26]
A的逆矩阵为:
A − 1 = 1 a d − b c ⋅ [ d − b − c a ] A^{-1}=\frac{1}{ad-bc}\cdot\begin{bmatrix}d & -b \\ -c & a\end{bmatrix} A−1=ad−bc1⋅[d−c−ba]
A − 1 = 1 8 ⋅ 6 − ( − 2 ) ⋅ 4 ⋅ [ 6 − ( − 2 ) − 4 8 ] A^{-1}=\frac{1}{8\cdot 6-(-2)\cdot 4}\cdot\begin{bmatrix}6 & -(-2) \\ -4 & 8\end{bmatrix} A−1=8⋅6−(−2)⋅41⋅[6−4−(−2)8]
A − 1 = 1 48 + 8 ⋅ [ 6 2 − 4 8 ] A^{-1}=\frac{1}{48+8}\cdot\begin{bmatrix}6 & 2 \\ -4 & 8\end{bmatrix} A−1=48+81⋅[6−428]
A − 1 = 1 56 ⋅ [ 6 2 − 4 8 ] A^{-1}=\frac{1}{56}\cdot\begin{bmatrix}6 & 2 \\ -4 & 8\end{bmatrix} A−1=561⋅[6−428]
A − 1 = [ 6 ⋅ 1 56 2 ⋅ 1 56 − 4 ⋅ 1 56 8 ⋅ 1 56 ] A^{-1}=\begin{bmatrix}6\cdot \frac{1}{56} & 2 \cdot \frac{1}{56} \\ -4 \cdot \frac{1}{56} & 8 \cdot \frac{1}{56}\end{bmatrix} A−1=[6⋅561−4⋅5612⋅5618⋅561]
A − 1 = [ 6 56 2 56 − 4 56 8 56 ] A^{-1}=\begin{bmatrix}\frac{6}{56} & \frac{2}{56} \\ -\frac{4}{56} & \frac{8}{56}\end{bmatrix} A−1=[566−564562568]
OK,现在计算得 A − 1 = [ 6 56 2 56 − 4 56 8 56 ] A^{-1}=\begin{bmatrix}\frac{6}{56} & \frac{2}{56} \\ -\frac{4}{56} & \frac{8}{56}\end{bmatrix} A−1=[566−564562568],然将与 A = [ 8 − 2 4 6 ] A=\begin{bmatrix}8 & -2 \\ 4 & 6\end{bmatrix} A=[84−26]相乘,结果看看是否等于 I I I:
A − 1 ⋅ A = I A^{-1}\cdot A = I A−1⋅A=I
[ 6 56 2 56 − 4 56 8 56 ] ⋅ [ 8 − 2 4 6 ] = [ 1 0 0 1 ] \begin{bmatrix}\frac{6}{56} & \frac{2}{56} \\ -\frac{4}{56} & \frac{8}{56}\end{bmatrix} \cdot \begin{bmatrix}8 & -2 \\ 4 & 6\end{bmatrix}=\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix} [566−564562568]⋅[84−26]=[1001]
[ 6 ⋅ 8 56 + 2 ⋅ 4 56 6 ⋅ ( − 2 ) 56 + 2 ⋅ 6 56 − 4 ⋅ 8 56 + 8 ⋅ 4 56 − 4 ⋅ ( − 2 ) 56 + 8 ⋅ 6 56 ] = [ 1 0 0 1 ] \begin{bmatrix}\frac{6 \cdot 8}{56} + \frac{2 \cdot 4}{56} & \frac{6 \cdot (-2)}{56} + \frac{2 \cdot 6}{56} \\ -\frac{4\cdot 8}{56} + \frac{8\cdot 4}{56} & -\frac{4\cdot (-2)}{56} + \frac{8 \cdot 6}{56}\end{bmatrix} =\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix} [566⋅8+562⋅4−564⋅8+568⋅4566⋅(−2)+562⋅6−564⋅(−2)+568⋅6]=[1001]
[ 48 56 + 8 56 − 12 56 + 12 56 − 32 56 + 32 56 8 56 + 48 56 ] = [ 1 0 0 1 ] \begin{bmatrix}\frac{48}{56} + \frac{8}{56} & \frac{-12}{56} + \frac{12}{56} \\ -\frac{32}{56} + \frac{32}{56} & \frac{8}{56} + \frac{48}{56}\end{bmatrix} =\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix} [5648+568−5632+563256−12+5612568+5648]=[10

本文深入探讨矩阵概念,包括行列式、逆矩阵、伴随矩阵、余子式及代数余子式,详解其计算方法与实际应用,尤其在3D图形学中的坐标变换与还原。
最低0.47元/天 解锁文章
673

被折叠的 条评论
为什么被折叠?



