第4章 矩阵简介
4.1节严格地从数学的角度讨论了矩阵的一些基本性质和操作。(更多矩阵运算将在第6章中讨论)
4.2节解释了如何几何解释这些属性和操作。
4.3节将矩阵的使用在本书中更大的线性代数领域。
4.1 矩阵的数学定义
在线性代数中,矩阵是排列成行和列的数字的矩形网格。回想我们前面将向量定义为一维数列的定义,矩阵同样可以定义为二维数列。(“二维数组”中的“二”来自于行和列,不应该与二维向量或矩阵混淆)。所以向量是标量的数组,矩阵是向量的数组。
矩阵元素的下标符号表示
矩阵的对角元素(diagonal elements)
如果一个矩阵中所有的非对角元素都为零,那么这个矩阵就是一个对角矩阵(diagonal matrix)。
一个特殊的对角矩阵是单位矩阵。n维单位矩阵记为,即对角线上的值为1的n × n矩阵,其余元素均为0。
通常,上下文会明确在特定情况下使用的单位矩阵的维度。在这种情况下,我们省略下标,将单位矩阵简称为I。
单位矩阵对于矩阵来说就像数字1对于标量来说一样。
一个维数为n的矢量可以看成是一个1 ×n的矩阵,也可以看成是一个n × 1的矩阵。一个1 × n的矩阵被称为行向量,一个n × 1的矩阵被称为列向量。
给定一个r × c矩阵M, M的转置,表示为,是c × r矩阵其中列是由M的行组成的,换句话说,
。这会使矩阵对角线“翻转”。
= M,对于任意维的矩阵M。换句话说,如果我们对一个矩阵转置,然后再转置一次,我们就得到了原来的矩阵。这个规则也适用于向量。
任何对角矩阵D等于它的转置: = D,这包括单位矩阵I。
矩阵与标量相乘
两个矩阵相乘
A中的列数与B中的行数必须匹配,如果A中的列数与B中的行数不匹配,那么AB的乘法是没有定义的(尽管BA是可能的)。
矩阵相乘计算计算方式
找到A中的第i行与B的第j列,将行和列的相应元素相乘,即每个元素cij等于A的第i行与B的第j列的向量点积:
- 任意矩阵M与方阵S在任意一边相乘,得到的矩阵大小与M相同,前提是矩阵的大小允许这种乘法。如果S是单位矩阵I,那么结果就是原始矩阵M:MI = IM = M。(这就是它被称为单位矩阵的原因!)
- 矩阵乘法不是可交换的。一般来说,AB != BA。
- 矩阵乘法是结合式的(当然,这是假设A、B和C的大小是允许乘法的):(AB) C = C (BC)。
- 矩阵乘法也与标量或矢量的乘法有关:(kA)B = k(AB) = A(kB),(vA) B = v (AB)。
- 对两个矩阵的乘积进行转置,就相当于对它们的转置乘积进行逆置:
矢量和矩阵相乘
- 矩阵中的每个元素决定输入向量中的某个元素对输出向量中的某个元素的“权重”。例如,当使用行向量时,m12控制有多少输入x值趋向输出y值。
- 向量乘以矩阵的乘法分布在向量的加法上,也就是说,对于向量v, w和矩阵M,(v + w)M = vM + wM
- 最后,也许是最重要的,乘法的结果是矩阵的行或列的线性组合。
与
如果忽略它们一个是行向量而另一个是列向量的事实,向量的分量的值是不一样的!这就是为什么行向量和列向量之间的区别如此重要。
尽管电子游戏编程中的一些矩阵确实代表了任意的方程组,但更多的是我们所描述的那种类型的变换矩阵,它们表示坐标空间之间的关系。为了这个目的,我们发现行向量更可取,因为非常合理的原因:变换的顺序读起来像一个从左到右的句子。当发生多个转换时,这一点尤其重要。例如,如果我们想用矩阵A、B和C来变换矢量v,按照这个顺序,我们写vABC,这些矩阵按照从左到右的变换顺序排列。如果使用列向量,那么这个向量就在右边,所以变换会按照从右到左的顺序进行。在这种情况下,我们写CBAv。
DirectX使用行向量
OpenGL使用列向量
4.2 矩阵的几何解释
一般来说,方阵可以描述任何线性变换(不包括平移,将0矢量乘以任何方阵都会得到0矢量。因此,方阵表示的线性变换与原始坐标空间具有相同的原点——变换不包含平移(平移要在4维矩阵上操作))。然而,几何的其他性质,例如长度、角度、面积和体积,可能会因变换而改变。在非技术意义上,线性变换可以拉伸坐标空间,但它不会弯曲或扭曲它。这是一组非常有用的转换,包括旋转(rotation)、比例缩放(scale)、正交投影(orthographic projectio)、反射(reflection)、错切(shearing)。
矢量×矩阵乘法的结果是矩阵行的线性组合。关键是把这些行矢量解释成基矢量。用符号p q r表示基矢量的集合。把这些矢量作为行放在我们的矩阵M中(M是方阵),得到的矢量是任何线性变换的结果:
4.3 线性代数的宏大图景
线性代数是基础。
虽然传统的线性代数和方程组在基本的电子游戏编程中并没有发挥突出的作用,但它们在许多高级领域中是必不可少的。考虑一下今天正在引起热议的一些技术:流体、布料和头发模拟(和渲染);更强大的人物过程动画;实时全局照明;机器视觉;手势识别等。这些看似不同的技术都有一个共同点,那就是它们都涉及到复杂的线性代数问题。
本书推荐课程: Gilbert Strang教授的系列讲座,它可以从网站 ocw.mit.edu 的 MIT OpenCourseWare(麻省理工学院的公开课)免费下载。