矩阵是3D数学的重要基础。它主要用来描述两个坐标系统间的关系,通过定义一种运算而将一个坐标系中的向量转换到另一个坐标系中。
矩阵-数学定义
线性代数中,矩阵就是以行和列形式组织的矩形数字块
- 向量是标量的数组
- 矩阵是向量的数组
矩阵的维度和记法
向量的维度定义为:
它所包含的数的个数。
矩阵的维度定义为:
它包含了多少行和多少列。
一个rXc的矩阵有r行、c列。
下面是一个4X3矩阵的例子:
这个4X3矩阵展示了矩阵的标准记法。将数字排列成一个方块,用方括号括起来。
注意,有些地方可能用圆括号而不是方括号来包围这个方块。而且另外一些人则使用竖线,这里保留竖线记法,但将它用在一个与矩阵相关却完全不同的概念上:矩阵行列式。
用黑体大写字母表示矩阵:如M,A,R。需要引用矩阵的分量时,采用下标法,常使用对应的斜体小写字母。如下面的3X3矩阵所示:
m(ij)表示M的第i行第j列元素。矩阵的下标从1
开始,所以第一行和第一列都用数字1
.
方阵
行数和列数相同的矩阵称作方阵。
方阵的对角线元素就是方阵中行号和列号相同的元素。
例如,3X3矩阵M的对角线元素为m(11),m(22),m(33)。
其它元素均为非对角线元素。简单的说,方阵的对角线元素就是方阵对角线上的元素。
如果所有非对角线元素都为0,那么称这种矩阵为对角矩阵。例如:
单位矩阵是一种特殊的对角矩阵。n维单位矩阵记作I(n),是nXn矩阵,对角线元素为1,其它元素为0。例如,3X3单位矩阵:
3D单位矩阵
通常,上下文会说明特定情况下单位矩阵的维数,此时少省略下标直接记单位矩阵为I。
单位矩阵非常特殊,因为它是矩阵的乘法单位元
。其基本性质是用任意一个矩阵乘以单位矩阵,都将得到原矩阵。所以,在某种意义上,单位矩阵对矩阵的作用就犹如1对于标量的作用。
向量作为矩阵使用
矩阵的行数和列数可以是任意正整数,当然也包括1。
向量:一行或一列的矩阵。
一个n向量能被当作1Xn矩阵或nX1矩阵。1Xn矩阵被称作行向量
,nX1矩阵称作列向量
。行向量平着写,列向量竖着写,例如:
转置
考虑一个rXc的矩阵M。M的转置记作M(T)。
转置矩阵
对于向量来说,转置将使行向量变成列向量,使列向量成为行向量。
行向量和列向量之间的转置
标量和矩阵的乘法
矩阵M能和标量k相乘,结果是一个和M维数相同的矩阵。
标量乘以3X3矩阵
矩阵乘法
一个rXn矩阵A能够乘以nXr矩阵B,结果是一个rXc矩阵,记作AB。
例如,设A为4X2矩阵,B为2X5矩阵,那么结果AB为4X5矩阵:
矩阵乘法计算如下:
记rXn矩阵A与nXc矩阵B的积rXc矩阵AB为C。C的任意元素C(ij)等于A的第i行向量与B的和j行微量的点乘结果
正式定义为:
对结果中的任意元素C(ij),取A的第i行和B的第j列,将行和列中对应元素相乘,然后将结果相加(等于A的i行和B的j列的点积)。C(ij)就等于这个和。
下面展示了怎样计算C(24):
C的第2行第4列的元素等于A的第2行和B的第4列的点积。
另一种帮助记忆这个法则的方法是将B写在C上面。这种写法的目的是使A的行和B的列与C中的对应元素对齐。
对于几何中的应用,特别关注方阵相乘--特别是2X2矩阵和3X3乱加的情况。
2X2矩阵的乘法
实数2X2矩阵的示例:
下面公式给出了3X3矩阵的情况:
3X3矩阵的乘法
实数3X3矩阵的示例:
向量与矩阵的乘法
因为向量能被当作是一行或一列的矩阵,所以能够与矩阵相乘。
这里行向量和列向量的区别非常重要。
下面公式展示了3D行、列向量如何左乘、右乘3X3矩阵:
- 行向量左乘矩阵时,结果是行向量。
- 列向量右乘矩阵时,结果是列向量。
关于矩阵和向量相乘的注意事项:
- 结果向量中的每个元素都是原向量与矩阵中单独行或列的点积。
- 矩阵中的各元素决定了输入向量中特定元素在输出向量中占的比重。如: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]。
依据三角形法则将这个位移序列解释成向量的加法:
一般来说,任意向量v都能写为扩展形式:
另一种略有差别的形式为:
注意右边的向量就是x,y,z轴。向量的坐标都表明了平行于相应坐标轴的有向位移。
将公式重写,p,g,r定义为指向+x,+y,+z方向的单位向量。
将向量表示为基向量的线性组和
将矩阵解释为基向量集合
用一个向量乘以该矩阵,得到:
这和前面计算转换后的v的等式相同。
如果把矩阵的行解释为坐标系的基向量,那么乘以该矩阵就相当于执行了一次坐标转换。
若有aM=b,我们就可以说,M将a转换到b。
从这一点看,术语转换和乘法是等价的。
矩阵的形式
基向量[1, 0, 0], [0, 1, 0], [0, 0, 1]乘以任意矩阵M时的情况:
用基向量[1, 0, 0]乘以M时,结果是M的第1行。其它两行也有同样的结果。
矩阵的每一行都能解释为转换后的基向量。
- 有了一种简单的方法来形象化解释矩阵所代表的变换。
- 有了反向建立矩阵的可能--给出一个期望的变换(如旋转、缩放等),能够构造一个矩阵代表些变换。我们所做的一切就是计算基向量的变换,然后将变换后的基向量填入矩阵。
看下列2X2矩阵:
这个矩阵的代表的变换是什么?首先,从矩阵中抽出基向量p和q:
以原基向量(x轴,y轴)做参考,在笛卡尔平面中展示了这些向量。
x基向量变换到上面的p向量,y基向量变换至q向量。所以2D中想象矩阵的方法就是想象由行向量构成的L形状。M代表的部分变换是逆时针旋转26度。
2D旋转矩阵的行向量
当然,所有向量都被线性变换所影响,不只是基向量。从L形状能够得到变换最直观的印象,把基向量构成的整个2D平行四边形画完整有助于进一步看到变换对其它向量的影响。
矩阵行向量构成的2D平行四边形
平行四边形称作偏转盒
,在盒子中画一个物体有助于理解。
在盒子中画一个物体
很明显,矩阵M不仅旋转坐标系,还会拉伸它。
这种技术也能应用到3D转换中。2D中有两个基向量,构成L型,3D中有三个基向量,它们形成一个三角架。首先,展示一个转换前的物品。
考虑以下3D变换矩阵:
从矩阵的行中抽出基向量,能想象出该矩阵所代表的变换。变换后的基向量、立方体、茶壶如下所示。
转换前的茶壶、单位立方体和基向量
转换后的茶壶、单位立方体和基向量
这个变换包含z轴顺时针旋转45度和不规则的缩放,使得茶壶比以前高。
变换并没有影响到z轴,因为矩阵的第三行是[0, 0, 1]。
总结
- 方阵的行能被解释为坐标系的基向量。
- 为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵。
- 从原坐标系到这些基向量定义的新坐标系的变换是一种线性变换。线性变换保持直线和平行线,但角度、长度、面积可能会被改变。
- 零向量乘以任何矩阵仍然得到零向量。因此,方阵所代表的线性变换的原点和原坐标系的原点一致。变换不包含原点。
- 可以通过想象变换后的坐标系的基向量来想象矩阵。这些基向量在2D中构成L型,在3D中构成三角架型。用一个盒子及辅助物更有助于理解。