Unity Shader学习日记 part 2 线性代数--矩阵
矩阵的基础概念这里就不用说了。
先来看看矩阵的乘法
矩阵乘法
对于矩阵A*矩阵B有这样的要求
1.左边矩阵的(A)列数等于右边矩阵的(B)的行数
2.相乘的的结果是一个左边矩阵的(A)行数*右边矩阵(B)的列数的矩阵
3.相乘的时候,用左边矩阵(A)的每一行乘以右边矩阵(B)的每一列,然后相加
例子:
注意:
矩阵的相乘不满足交换律,A*B不等于B*A
矩阵的相乘满足结合律,A*(B*C)=(A*B)*C
特殊的矩阵
1.方块矩阵
方块矩阵:又称方阵,指行和列数量相等的矩阵,如3*3,4*4
2.对角矩阵
对角矩阵:只有主对角线上有值的方阵,其余地方为0。
主对角线:从左上角到右下角的对角线。
3.单位矩阵
单位矩阵:主对角线的值为1的对角矩阵
性质:任何矩阵M和单位矩阵I相乘的结果都是矩阵本身M(需要满足相乘规则)
4.数量矩阵
数量矩阵:主对角线的值是同一个值的对角矩阵
5.转置矩阵
转置矩阵:将矩阵的行和列互换后的矩阵(在右上角加T表示)
性质:
1.矩阵转置的转置等于原矩阵
2.矩阵串接的转置等于反向串接各矩阵的转置
6.逆矩阵
逆矩阵:逆矩阵是什么不重要,重要的是怎么求逆矩阵。逆矩阵通常在右上角加-1表示。需要注意的是并不是所有矩阵都有逆矩阵,有逆矩阵的矩阵,成为可逆的或非奇异的。没有逆矩阵的矩阵成为不可逆的或奇异的。
逆矩阵的求解
1.确定矩阵是否为方阵
2.求矩阵的行列式,行列式为0的矩阵不可逆(没有逆矩阵)
3.求矩阵的代数余子式矩阵
4.求标准伴随矩阵(代数余子式矩阵的转置)
5.逆矩阵(标准伴随矩阵/行列式)
1.行列式求解
口诀:左上左下画对角线,线上数字相互乘法,数量不够对面取,朝下相加,朝上相减
2.代数余子式的求解
计算规则:Cij=-1的i*j次幂乘以除去i行j列的剩下的矩阵
例子:
逆矩阵的性质
1.逆矩阵的逆矩阵等于原矩阵
2矩阵乘以自己的逆矩阵等于单位矩阵
3.单位矩阵的逆矩阵是它本身
4.转置矩阵的逆矩阵是逆矩阵的转置
5.矩阵串接相乘的逆矩阵等于反向串接各矩阵的逆矩阵相乘
6.逆矩阵可以计算矩阵变换的反向变换
7.正交矩阵
正交矩阵:如果一个方阵和他的转置矩阵相乘等于单位矩阵的话,则这个方阵就是正交矩阵。
而在学习逆矩阵的时候,逆矩阵有一个性质:矩阵和他的逆矩阵乘积等于单位矩阵
这就意味着,如果一个矩阵是正交矩阵,那么他的逆矩阵就是他的转置矩阵,同样的,他的转置矩阵也是他的逆矩阵
向量的点乘:A(x1,y1,z1) B(x2,y2,z2) A*B=x1*x2+y1*y2+z1*z2.
对于向量的点乘而言,如果点乘结果为0,那么这两个向量相互垂直,点乘实际上求的是一个向量在另一个向量上的投影。
如果向量和自己的点乘结果为1,那么这个向量是单位向量
回到正交矩阵。对于正交矩阵而言,矩阵正交,那么他的转置矩阵也是正交的
正交矩阵的性质:
1.正交矩阵的每一行(列)都是单位向量
2.正交矩阵的每一行(列),相互垂直
矩阵正交判断:
1.
2.对于n维向量(v1,v2,v3,...)而言,向量的模长|v|=(v1^2+v2^2+v3^2+.....+vn^2)=1
同时,矩阵的每一行(列)相互垂直
8.行矩阵与列矩阵
行矩阵:只有一行的矩阵
列矩阵:只有一列的矩阵
需要注意的是,在Unity中的使用规则:
在标准的线性代数中,矩阵与向量的相乘是按列相乘的,为了与标准数学和线性代数统一,也使用了按列计算的规则。说人话就是,在矩阵和向量的相乘中,把向量转为列矩阵进行计算
同样的也可以使用行矩阵,所以为了保持结果一致,有这样的规则
列:CBAv=C(B(Av)) == 行: vA(t)B(t)C(t)=(((vA(t))B(t))C(t) 使用转置矩阵
矩阵的作用主要是变换,之后会了解到。