这边不去理解或推导为什么要这么算,没啥实际意义,都是直接按矩阵规定好的公式套用
加减法
C=A+B
C=A-B
a) A和B的行和列必须相同
乘法, 没有除法
C=A*B
a) A的列数和B的行数相同才能相乘,结果矩阵C的行列为:A的行数,B的列数
b1) 示例1,2列*2行,结果为2行2列。
A的第1行与B的第1列进行运算,A的第2行与B的第1列进行运算
b2) 示例2,2列*2行,结果为1行1列
A的第1行与B的第1列进行运算
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
转置矩阵
就是把矩阵的行列互换
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中的用途之一:用于将worldPos转换为localPos。
原理就是求transform.localToWorldMatrix的逆矩阵,得到worldToLocalMatrix。
var m3 = this.transform.localToWorldMatrix * this.transform.worldToLocalMatrix; Debug.Log($"{m3}"); //验证下结果是否为单位矩阵 var worldPos = this.transform.TransformPoint(new Vector3(1, 0, 0)); var localPos = this.transform.InverseTransformPoint(worldPos);
正交矩阵
a) 定义:方阵*它的转置矩阵结果为单位矩阵,这个方阵就是正交的,叫做正交矩阵
b) 正交矩阵的转置矩阵=逆矩阵
c) 用途:转置矩阵直接当逆矩阵用,优化计算效率。
参考
图形学知识基础:矩阵_王王王渣渣的博客-CSDN博客_图形学 矩阵
矩阵和矩阵乘法的直观化理解_拂面清风三点水的博客-CSDN博客_矩阵与矩阵乘法感悟
MathTool - 公式编辑器 (imathtool.com)
标签:转置,单位矩阵,矩阵,transform,基础知识,Matrix4x4,var From: https://www.cnblogs.com/sailJs/p/16476005.html