1:矩阵定义
矩阵是一个按照长方阵排列的复数或实数的集合。
向量的维度是看向量有几个分量。矩阵的维度则是看它有几行、几列。一个r×c矩阵有r行,c列。即2×3矩阵有2行3列。3×2矩阵则有3行2列。
在一个m×n的矩阵A中,有m×n个数,这些数称为矩阵A的元素。数aij位于矩阵的第i行,第j列,称为矩阵A的(i,j)元。
矩阵中元素的下标是从1开始的。但是unity 中从0开始
在Unity中,可以使用Matrix4x4.SetRow和Matrix4x4.SetColumn来设置一个4×4矩阵的某行或某列。
在Unity中,可以使用Matrix4x4.GetRow和Matrix4x4.GetColumn来获取一个4×4矩阵的某行或某列。结果为Vector4类型。
这里的index是从0开始。
2:矩阵加减
只有维度相同的矩阵,才可以相加相减。矩阵和矩阵的相加/相减即矩阵各相同位置的元素的相加相减。
3:矩阵和标量相乘
矩阵和标量相乘,得到的仍然是一个相同维度的矩阵。矩阵和标量的乘法,即矩阵的每个元素和该标量相乘。
4:矩阵和矩阵相乘
向量可以被当做一行或者一列的矩阵。3维向量可以看作是3×1矩阵,或是1×3矩阵。
矩阵和矩阵相乘时,只有满足第一个矩阵的列数和第二个矩阵的行数相等的条件时,才可以相乘。即r×n矩阵,才能和n×c矩阵相乘,得到的结果是一个r×c矩阵。
所以,向量与矩阵相乘时,行向量需要在左边,列向量需要在右边。
矩阵和向量相乘的结果向量中,每个元素都是原向量和矩阵中单独行或者列的点积
按行来算 按列来算
(1,2,0).(1,1,0) =>3 (1,2,0).(1,1,0) =>3
(2,1,0).(1,1,0) =>3 (2,1,0).(1,1,0) =>3
(0,0,1).(1,1,0) =>0 (0,0,1).(1,1,0) =>0
两个矩阵相乘的规则和矩阵和向量相乘的规则相同。
矩阵A和矩阵B相乘,得到的矩阵C中的任意元素Cij等于A的第i行向量与B的第j列向量的点乘结果。
在Unity中,可以使用Matrix4x4.operator *来进行矩阵和矩阵的乘法运算。
2行2列 2行2 列 =>第一个矩阵的列数等于第二个矩阵的行数可以相乘,取第一个矩阵的行 第二个矩阵的列 的 2行2列
(2,1).(1,2) (2,1).(4,6) => 4 14
(3,2).(1,2) (3,2).(4,6) => 7 24
方块矩阵:行数和列数相等的矩阵被称为方块矩阵。
方块矩阵中,行号和列号相等的元素叫对角元素。
如果一个矩阵除了对角元素外的所有元素都为0,那么这个矩阵就叫做对角矩阵。
方块矩阵 对角矩阵 不一定对角线是1 是1是单位矩阵
如果对角矩阵中的对角元素都为1,则这个对角矩阵被称为单位矩阵
用任意一个矩阵乘以单位矩阵,都将得到原矩阵。
在Unity中,可以通过Matrix4x4.identity来获得一个4×4的单位矩阵。
在Unity中,可以通过Matrix4x4.isIdentity来判断一个矩阵是不是单位矩阵。
在Unity中,可以通过Matrix4x4.zero获得一个4×4的所有元素都为0的矩阵。
转置矩阵是对原矩阵进行转置运算后得到的矩阵。
一个r×c的矩阵转置后,可以得到一个c×r的矩阵。转置运算,即将原矩阵的第i行变为第i列,第j列变成第j行,也可以看作是沿着对角线翻折。
在Unity中,可以通过Matrix4x4.transpose获取一个矩阵的转置矩阵。
逆矩阵,只有方块矩阵才可能有逆矩阵,因为一个矩阵A和它的逆矩阵B需要满足条件:
AB = I(I是单位矩阵)。
如果一个矩阵有相应的逆矩阵,则可以说这个矩阵是可逆的,或者说是非奇异的。如果一个矩阵没有相应的逆矩阵,则可以说这个矩阵是不可逆的,或者说是奇异的。
判断一个矩阵是否是可逆的,需要求得矩阵的行列式,如果它的行列式不为0,那么它就是可逆的。
二阶行列式的计算方法为对角线相乘相减。
三阶行列式的计算方法可以使用代数余子法,即行列式可以按某一行或某一列展开成元素与其对应的代数余子式的乘积之和。
行列式某元素的余子式:行列式划去该元素所在的行与列的各元素,剩下的元素按原样排列,得到的新行列式.
行列式某元素的代数余子式:行列式某元素的余子式与该元素对应的正负符号的乘积.
正负号效果
一个4×4矩阵的逆矩阵的求解方法如下:
在Unity中,可以通过Matrix4x4.inverse来获取一个4×4矩阵的逆矩阵。
|A| = +1|3,4| + (-1)|1,4| +2|1,3| => 7 + -5 +4 = 6
|2,5| |0,5| |0,2|
大括号里面的 正负符号对应 第一行对应原来矩阵第一列去掉后的余子式