• 矩阵数学定义
    1,矩阵就是以行和列形式组织的矩形数字块。形式上,向量可以定义为一维数组,而矩阵则可以定义为二维数组。因此,矩阵可以理解为由多个向量组成,类似二维数组由多个一维数组组成一样。
    2,矩阵的维度和记法:前面我们把向量的维度定义为它所包含的数的个数,而矩阵的维度被定义为它包含了多少行和多少列。一个r × c矩阵表示有r行,c列。矩阵的表示采用下标法,下标从1开始,这和数组下标从0开始不同,这也是我们代码不用数组表示矩阵的原因之一。表示如图:
  • 三维矩阵索引 三维矩阵定义_矩阵相乘

  • 3,方阵:行数和列数相同的矩阵称作方阵。方阵的对角线元素就是方阵中行号和列号相同的元素,其它则是非对角线元素。而如果一个矩阵的所有非对角线元素都为0,那么这种矩阵称为对角矩阵单位矩阵是一种特殊的对角矩阵,即对角线元素为1,其它为0的矩阵,单位矩阵对矩阵的作用犹如1对标量的作用,任何一个矩阵乘以单位矩阵,都将得到原矩阵。表示如下图:
  • 三维矩阵索引 三维矩阵定义_矩阵基本理论_02


  • 三维矩阵索引 三维矩阵定义_三维矩阵索引_03


  • 三维矩阵索引 三维矩阵定义_矩阵相乘_04

  • 4,向量作为矩阵使用:一个向量也可以看做一个矩阵,行向量就是1×n的矩阵,列向量就是n×1的矩阵。人们通常偏向使用行向量,DirectX使用的就是行向量,而OpenGL使用的是列向量。不管是使用哪种向量,它们的几何意义是一样的,只不过向量与矩阵相乘,如果使用列向量,只有右乘才有意义,而使用行向量,就得左乘才有意义(这和矩阵相乘的运算规则有关)。
    5,转置:就是将矩阵的行向量变成列向量,将列向量变成行向量。如下图:
  • 三维矩阵索引 三维矩阵定义_矩阵_05

  • 6,标量和矩阵相乘:其结果是一个和原矩阵维数一样的矩阵,元素的值为这个标量和原矩阵中每个元素相乘。如图:
  • 三维矩阵索引 三维矩阵定义_标量_06

  • 7,矩阵与矩阵相乘:并不是所有的矩阵相乘都有意义,只有一个r × n矩阵A能够乘以一个n × c矩阵B,结果是一个r × c矩阵,记作:AB(即A的列数和B的行数必须相等,否则AB无意义)。结果AB矩阵中任意元素 ‘ij’ 等于A的第i行向量与B的第j列向量的点乘值。如图:
  • 三维矩阵索引 三维矩阵定义_矩阵_07

  • 从这里可以看出,向量与矩阵相乘,行向量只有左乘矩阵才有意义,而且结果是行向量。列向量只有右乘矩阵才有意义,结果是列向量。如图所示:
  • 三维矩阵索引 三维矩阵定义_矩阵_08


  • 矩阵几何解释
    通俗点讲,一个矩阵其实对应一个坐标系,如2 × 2矩阵的每一行对应笛卡尔坐标系的x , y轴,3 × 3矩阵对应3D笛卡尔坐标系中的x, y, z坐标轴,而且这种方阵所表的坐标系和原坐标系(标准坐标系)原点一致。一个向量乘以某个矩阵,其实就是把这个向量从当前坐标系转换到这个矩阵描述的坐标系中去,即坐标系之间的转换,它是一种线性变换,坐标轴只会旋转或拉伸,不会弯曲,折叠。而这种坐标系之间的转换可以带来的表现是:旋转,缩放,投影,镜像,仿射。示意图如下:
    2 × 2 矩阵:

    3 × 3 矩阵: