线性代数 - 矩阵基础知识
这边不去理解或推导为什么要这么算,没啥实际意义,都是直接按矩阵规定好的公式套用
加减法
C=A+B
C=A-B
a) A和B的行和列必须相同
乘法, 没有除法
C=A*B
a) A的列数和B的行数相同才能相乘,结果矩阵C的行列为:A的行数,B的列数
b1) 示例1:A为2列,B为2行,可以相乘;结果为2行2列(A的行,B的列)
计算过程:A的第1行与B的第1列进行运算,作为结果的1行1列的值;A的第2行与B的第1列进行运算,作为结果的2行1列的值

b2) 例2:

b3) 例3:

b4) 例4:

b5) 例5:矩阵嵌套矩阵的情况

其中,
,a, b, c, d均为常数
c) 不满足交换律:A*B和B*A会得到不同行列的C
d) 满足结合律:(A*B)*C=A*(B*C)
e) 满足分配律:(A+B)*C=A*C+B*C, A*(B+C)=A*B+A*C
转置矩阵
就是把矩阵的行列互换,用AT来表示
Matrix4x4 m = new Matrix4x4(); m.m00 = 1; m.m01 = 2; m.m02 = 3; m.m03 = 4; Debug.Log($"{m}"); var m2 = Matrix4x4.Transpose(m); Debug.Log($"{m2}");
结果

逆矩阵
a) 方阵才有逆矩阵,但并不是所有方阵都有逆矩阵
b) 原矩阵*逆矩阵,结果为单位矩阵。m*m-1=I
c) 求逆矩阵的方法,这边不做介绍,这边只关心用途。Unity里直接用Matrix4x4.Inverse就可以得到。
d) 在Unity中的用途之一:获得反向变换矩阵
localPos转换为worldPos使用localToWorldMatrix,那它的逆矩阵Matrix4x4.Inverse(localToWorldMatrix)就可以将worldPos转换为localPos。
localToWorldMatrix的逆矩阵其实就是worldToLocalMatrix
if (this.transform.worldToLocalMatrix == Matrix4x4.Inverse(this.transform.localToWorldMatrix)) { Debug.Log("ok"); }
正交矩阵
a) 定义:方阵*它的转置矩阵结果为单位矩阵(即:m*mT=I或mT*m=I),这个方阵就是正交的,叫做正交矩阵
b) 因为m*m-1也等于单位矩阵I,所以正交矩阵的转置矩阵=逆矩阵。(注意:方阵的转置矩阵不一定就是它的逆矩阵)
c) 用途:遇到正交矩阵,就不需要用公式算逆矩阵了,直接用转置矩阵,优化计算效率。
d) 像旋转矩阵就是正交矩阵,它的转置矩阵可以直接当做逆矩阵来用。
一些符号
Rn:表示n维向量
Rnxm:表示n行m列矩阵
用矩阵表达向量
(a*x1, a*y1, a*z1, a*a+d),矩阵增加的第4行|a, b, c, d|并不会参与到xyz的计算中,所以没事





xa2+xb2+xc2=(xa, xb, xc)●(xa, xb, xc)
xa*ya+xb*yb+xc*yc=(xa, xb, xc)●(ya, yb, yc)
以此类推,还用下面这样的写法:

参考
图形学知识基础:矩阵_王王王渣渣的博客-CSDN博客_图形学 矩阵
矩阵和矩阵乘法的直观化理解_拂面清风三点水的博客-CSDN博客_矩阵与矩阵乘法感悟
MathTool - 公式编辑器 (imathtool.com)
用初等行运算(高斯-若尔当)来求逆矩阵 (shuxuele.com)
用余子式、代数余子式和伴随来求逆矩阵 (shuxuele.com)
求矩阵的逆的三种方法_charlotte0000的博客-CSDN博客_矩阵求逆
方阵的行列式记为det(A)或者|A|, 矩阵的行列式 (shuxuele.com)

浙公网安备 33010602011771号