矩阵是3D数学的重要基础。它主要用来描述两个坐标系统间的关系,通过定义一种运算而将一个坐标系中的向量转换到另一个坐标系中。

矩阵-数学定义


线性代数中,矩阵就是以行和列形式组织的矩形数字块

  • 向量是标量的数组
  • 矩阵是向量的数组

矩阵的维度和记法


向量的维度定义为:

它所包含的数的个数。

矩阵的维度定义为:

它包含了多少行和多少列。

一个rXc的矩阵有r行、c列。

下面是一个4X3矩阵的例子:

matrix-1

这个4X3矩阵展示了矩阵的标准记法。将数字排列成一个方块,用方括号括起来。

注意,有些地方可能用圆括号而不是方括号来包围这个方块。而且另外一些人则使用竖线,这里保留竖线记法,但将它用在一个与矩阵相关却完全不同的概念上:矩阵行列式。

用黑体大写字母表示矩阵:如M,A,R。需要引用矩阵的分量时,采用下标法,常使用对应的斜体小写字母。如下面的3X3矩阵所示:

matrix-2

m(ij)表示M的第i行第j列元素。矩阵的下标从1开始,所以第一行和第一列都用数字1.

方阵


行数和列数相同的矩阵称作方阵

方阵的对角线元素就是方阵中行号和列号相同的元素。

例如,3X3矩阵M的对角线元素为m(11),m(22),m(33)

matrix-3

其它元素均为非对角线元素。简单的说,方阵的对角线元素就是方阵对角线上的元素。

如果所有非对角线元素都为0,那么称这种矩阵为对角矩阵。例如:

matrix-4

单位矩阵是一种特殊的对角矩阵。n维单位矩阵记作I(n),是nXn矩阵,对角线元素为1,其它元素为0。例如,3X3单位矩阵:

matrix-5

3D单位矩阵

通常,上下文会说明特定情况下单位矩阵的维数,此时少省略下标直接记单位矩阵为I

单位矩阵非常特殊,因为它是矩阵的乘法单位元。其基本性质是用任意一个矩阵乘以单位矩阵,都将得到原矩阵。所以,在某种意义上,单位矩阵对矩阵的作用就犹如1对于标量的作用。

向量作为矩阵使用


矩阵的行数和列数可以是任意正整数,当然也包括1。

向量:一行或一列的矩阵。

一个n向量能被当作1Xn矩阵或nX1矩阵。1Xn矩阵被称作行向量nX1矩阵称作列向量。行向量平着写,列向量竖着写,例如:

matrix-6

转置


考虑一个rXc的矩阵MM的转置记作M(T)。

matrix-7

转置矩阵

对于向量来说,转置将使行向量变成列向量,使列向量成为行向量。

matrix-8

行向量和列向量之间的转置

matrix-9

标量和矩阵的乘法


矩阵M能和标量k相乘,结果是一个和M维数相同的矩阵。

matrix-10

标量乘以3X3矩阵

矩阵乘法


一个rXn矩阵A能够乘以nXr矩阵B,结果是一个rXc矩阵,记作AB

例如,设A为4X2矩阵,B为2X5矩阵,那么结果AB为4X5矩阵:

matrix-11

矩阵乘法计算如下:

记rXn矩阵A与nXc矩阵B的积rXc矩阵AB为C。C的任意元素C(ij)等于A的第i行向量与B的和j行微量的点乘结果

正式定义为:

matrix-12

对结果中的任意元素C(ij),取A的第i行和B的第j列,将行和列中对应元素相乘,然后将结果相加(等于A的i行和B的j列的点积)。C(ij)就等于这个和。

下面展示了怎样计算C(24):

matrix-13

C的第2行第4列的元素等于A的第2行和B的第4列的点积。

另一种帮助记忆这个法则的方法是将B写在C上面。这种写法的目的是使A的行和B的列与C中的对应元素对齐。

matrix-14

对于几何中的应用,特别关注方阵相乘–特别是2X2矩阵和3X3乱加的情况。

matrix-15

2X2矩阵的乘法

实数2X2矩阵的示例:

matrix-16-1

matrix-16-2

下面公式给出了3X3矩阵的情况:

matrix-17

3X3矩阵的乘法

实数3X3矩阵的示例:

matrix-18

向量与矩阵的乘法


因为向量能被当作是一行或一列的矩阵,所以能够与矩阵相乘。

这里行向量和列向量的区别非常重要。

下面公式展示了3D行、列向量如何左乘、右乘3X3矩阵:

matrix-19

  • 行向量左乘矩阵时,结果是行向量。
  • 列向量右乘矩阵时,结果是列向量。

关于矩阵和向量相乘的注意事项:

  • 结果向量中的每个元素都是原向量与矩阵中单独行或列的点积。
  • 矩阵中的各元素决定了输入向量中特定元素在输出向量中占的比重。如:m(11)决定了输入x对输出x值的贡献。
  • 矩阵—向量乘法满足对向量加法的分配律。对于向量v、w和矩阵M,有:(v+w)M=vM+wM

行向量与列向量


使用行向量依据。

  • 在文字中行向量形式更好一些。列向量书写麻烦,可用行向量转置的形式书写列向量
  • 行向量左乘矩阵形式更加方便。
  • DirectX使用行向量。

列向量依据。

  • 等式中使用列向量形式更好。
  • 线性代数书中多使用列向量。
  • 多本计算机图形学圣经使用列向量。
  • OpenGL使用列向量。

3D数学编程中,形式转换经常是错误的根源。

矩阵–几何解释


一般来说,方阵能描述任意线性变换

下面是一组非常有用的变换:

  • 旋转
  • 缩放
  • 投影
  • 镜象
  • 仿射

矩阵是怎样变换向量的


向量[1, -3, -4]能被解释成位移[1, 0, 0],随后位移[0, -3, 0],最后位移[0, 0, 4]。

依据三角形法则将这个位移序列解释成向量的加法:

matrix-20

一般来说,任意向量v都能写为扩展形式:

matrix-21

另一种略有差别的形式为:

matrix-22

注意右边的向量就是x,y,z轴。向量的坐标都表明了平行于相应坐标轴的有向位移。

将公式重写,p,g,r定义为指向+x,+y,+z方向的单位向量。

matrix-23

将向量表示为基向量的线性组和

matrix-24

将矩阵解释为基向量集合

用一个向量乘以该矩阵,得到:

matrix-25

这和前面计算转换后的v的等式相同。

如果把矩阵的行解释为坐标系的基向量,那么乘以该矩阵就相当于执行了一次坐标转换。

若有aM=b,我们就可以说,M将a转换到b。

从这一点看,术语转换乘法是等价的。

矩阵的形式


基向量[1, 0, 0], [0, 1, 0], [0, 0, 1]乘以任意矩阵M时的情况:

matrix-26

用基向量[1, 0, 0]乘以M时,结果是M的第1行。其它两行也有同样的结果。

矩阵的每一行都能解释为转换后的基向量。

  • 有了一种简单的方法来形象化解释矩阵所代表的变换。
  • 有了反向建立矩阵的可能–给出一个期望的变换(如旋转、缩放等),能够构造一个矩阵代表些变换。我们所做的一切就是计算基向量的变换,然后将变换后的基向量填入矩阵。

看下列2X2矩阵:

matrix-27

这个矩阵的代表的变换是什么?首先,从矩阵中抽出基向量p和q:

matrix-28

基向量(x轴,y轴)做参考,在笛卡尔平面中展示了这些向量。

x基向量变换到上面的p向量,y基向量变换至q向量。所以2D中想象矩阵的方法就是想象由行向量构成的L形状。M代表的部分变换是逆时针旋转26度。

matrix-29

2D旋转矩阵的行向量

当然,所有向量都被线性变换所影响,不只是基向量。从L形状能够得到变换最直观的印象,把基向量构成的整个2D平行四边形画完整有助于进一步看到变换对其它向量的影响。

matrix-30

矩阵行向量构成的2D平行四边形

平行四边形称作偏转盒,在盒子中画一个物体有助于理解。

matrix-31

在盒子中画一个物体

很明显,矩阵M不仅旋转坐标系,还会拉伸它。

这种技术也能应用到3D转换中。2D中有两个基向量,构成L型,3D中有三个基向量,它们形成一个三角架。首先,展示一个转换前的物品。

考虑以下3D变换矩阵:

matrix-32

从矩阵的行中抽出基向量,能想象出该矩阵所代表的变换。变换后的基向量、立方体、茶壶如下所示。

matrix-33

转换前的茶壶、单位立方体和基向量

matrix-34

转换后的茶壶、单位立方体和基向量

这个变换包含z轴顺时针旋转45度和不规则的缩放,使得茶壶比以前

变换并没有影响到z轴,因为矩阵的第三行是[0, 0, 1]。

总结


  • 方阵的行能被解释为坐标系的基向量。
  • 为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵。
  • 从原坐标系到这些基向量定义的新坐标系的变换是一种线性变换。线性变换保持直线和平行线,但角度、长度、面积可能会被改变。
  • 零向量乘以任何矩阵仍然得到零向量。因此,方阵所代表的线性变换的原点和原坐标系的原点一致。变换不包含原点。
  • 可以通过想象变换后的坐标系的基向量来想象矩阵。这些基向量在2D中构成L型,在3D中构成三角架型。用一个盒子及辅助物更有助于理解。