入门图形学3——变化的基础
3.1矩阵
3.1.1 矩阵的定义
- 矩阵就是二维的向量数组。
- 矩阵是由c列维度为R的向量组成的,我们标记一个矩阵的方法是标记它的行与列也就是Mr×c。
- 如下这是一个二行三列的矩阵:
3.1.1 一个二行三列矩阵
- 在计算机图形学中,我们经常利用矩阵来进行空间的变换,通过其与向量进行计算来变化空间。
3.1.2 方阵与对角单位阵
- 当矩阵的行与列相同时,我们称其为方阵,可用n来直接代表其维数,一个方阵也就是n×n维的矩阵。
- 更特殊一点,如果一个方阵的其他非对角元素均为0,对角元素为1,那么我们就称其为单位阵,单位阵在矩阵运算中充当着与实数运算中1相当的地位,也就是任何矩阵乘以单位阵得到的还是原矩阵(前提是它们能相乘)。
3.1.2 一个单位阵
3.1.3 相等矩阵与转置矩阵
- 判断一个矩阵相等的前提是,首先它们的维数相同,其次,它们逐行逐列对应的元素均相同,由此我们判断两个矩阵相等。
- 转置是一个操作,简单来说就是将矩阵的行与列交换,也就是第一行元素变成第一列元素,第一列元素反之变为第一行元素。
3.1.3 矩阵的转置
- 转置我们用上标T来表示,一个矩阵转置的转置就等于其本身,单位阵的转置也等于其本身。
3.2 矩阵的运算
3.2.1 矩阵的数乘与加法
- 矩阵的数乘很简单,因为矩阵某些性质与向量类似,因此矩阵的数乘实际上就是每一行每一列都乘上这个数。
- 矩阵的加法就是每一行每一列对应的元素相加,而其前提是它们的维数相同
`3.2.1 矩阵的加法
3.2.2 矩阵的乘法
- 矩阵乘法的前提是两个矩阵的行列对应相等,也就是Ac = Bc && Ar = Br
- 其方法就是第一个矩阵的行乘以第二个矩阵的列,然后将其对应元素相加作为新矩阵的元素
3.2.2 矩阵的乘法
- 如下面这个例子
3.2.2.1 矩阵乘法实例
- 因此作为矩阵乘法,其并不满足乘法的交换律,因为如果交换就会发生行列不相等的情况
- AB != BA
- 同样的如果AB = AC 不意味着 B =C,但矩阵满足乘法结合律,如下
3.2.2.2 矩阵满足乘法结合律
3.2.3 行列式与逆阵
- 行列式的定义
- 行列式是方阵M对应的一个标量,记作|M|
- 行列式的计算:
- 余子式与代数余子式
- 我们通过观察行列式的求解可发现,实际上它是由一个个代数余子式相加得来的:
3.2.3 矩阵的余子式求解
- 观察上图,实际上我们会发现余子式就是该元素乘上去除掉该元素所在的那一行和那一列后组合而成的矩阵。
- 余子式与代数余子式
- 矩阵转置的行列式等于原矩阵的行列式
- 行列式的几何意义
- 二维行列式的几何意义代表以基向量为两边构造的平行四边形的有符号面积
3.2.4行列式的几何意义
- 在三维中,行列式的几何意义是以基向量为三边的平行六面体的有符号面积。
- 逆矩阵
- 逆矩阵是只有方阵才具备的性质,它本质上是说明一个方阵与另一个方阵的乘积为1,这两个方阵互为逆阵。
3.2.3.1 逆矩阵计算的举例
- 判断是否可逆
- 判断一个矩阵是否可逆需要检测矩阵行列式的值,一个具有逆矩阵的矩阵其行列式不为0,反之则为0。
- 求解逆阵
- 这里就需要利用我们之前学习到的求矩阵代数余子式的方式,先求出矩阵的代数余子式,并用其组成一个新的矩阵,我们称其为伴随阵,随后将伴随阵除以行列式的值即可得到矩阵的逆阵
3.2.3.2 求解一个矩阵的逆阵
- 逆阵的应用
- 逆阵往往被用于执行反向操作上,因为它可以将其逆阵转化为单位阵,也就是最后得到1,可视为取消操作。
3.2.4 正交阵
- 定义:如果一个矩阵的转置(MT) 等于这个矩阵的逆,那么我们就称其为正交阵。
- 这个性质在以后得求矩阵逆的应用上非常方便,因为矩阵逆很难求,就像上面说的那样,因此如果知道该矩阵是个正交阵,那么我们可以直接求其转置,转置开销很小,所以就进一步优化了性能,简化了计算!
3.3向量与矩阵
3.3.1 行向量与列向量
- 向量其实就是单维度的矩阵,比如一个行向量其实就一个1×n的矩阵,一个列向量实际上就是n×1的矩阵。它们是可以与矩阵进行运算的,但为了使其运算有意义,矩阵的位置很重要,比如行向量只能在矩阵的左侧,而列向量则只能在矩阵的右侧
3.2.3.3 两个向量相乘为矩阵
- 所以实际上,结果向量的每一个元素,都是元向量与矩阵中单独行列的点积。
- 行向量左乘矩阵必为行向量,而列向量右乘矩阵必为列向量
3.3.2 矩阵的几何意义
我们前文提到了基向量这个概念,其实坐标系就是用基向量来进行表示的,我们已经强调过了矩阵实际上最大的作用就是改变空间坐标,那么究竟是如何改变的呢?
实际上每个向量都可以写作基向量的形式,而不同空间的基向量组成不同,但它们都有一个特点,那就是它们之间线性无关(也就是不在一个平面上)
矩阵乘以向量,实际上就是对这个向量的基向量进行的点乘变化
3.3.2 一个缩放矩阵
所以综上所述,矩阵与向量相乘,实际上就是对向量的基向量进行变化,又因为向量的基向量决定一个空间,因此实际上就是将一个向量,从一个空间变换到了另一个空间。
至此,我们完成了基本上所有的线性代数方面的学习,接下来就是去实际应用了,我们将会看到矩阵的实际作用,包括但不限于上述的例子。
参考资料
- 计算机图形学入门——3D渲染指南 GabrielGambetta著 贾凡译
- games101图形学入门——闫令琪 https://www.bilibili.com/video/BV1X7411F744
- 游戏开发入门——数学和物理 徐芝琦等著
- UnityShaderLab新手宝典 唐福幸著
- Shader开发实战 KyleHalladay著 郭华丰 韦静译
- DirectX12 3D游戏开发实战(龙书)Frank D.Luna 著 王臣译
- 【【官方双语/合集】线性代数的本质 - 系列合集】 https://www.bilibili.com/video/BV1ys411472E/?p=2&share_source=copy_web&vd_source=18d60239a339ad21d3b3f050742622f4
- Fundamental Of ComputerGraphics(虎书)by Steve Marschner
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Pleasant233!