Unity学习 - 矩阵

矩阵由m * n 个标量组成(m,n>0) [M11 , ... , M1n] [... , ... , ...] [Mm1 , ... , Mmn] ==矩阵计算== 矩阵 * 标量 矩阵中每一个标量和标量相乘 ![[Pasted image 20260128165612.png]] 矩阵 *

矩阵由m * n 个标量组成(m,n>0)

[M11 , ... , M1n]
[... , ... , ...]
[Mm1 , ... , Mmn]

==矩阵计算==

矩阵 * 标量

矩阵中每一个标量和标量相乘
![[Pasted image 20260128165612.png]]

矩阵 * 矩阵

[!warning] 注意
左矩阵列数等于右矩阵行数
结果矩阵大小为左行数右列数
左行 x 右列再相加
矩阵 * 矩阵不满足交换律但满足结合律

![[Pasted image 20260128165903.png]]

==特殊矩阵==

方块矩阵(行列数相等的矩阵,例2x2矩阵)

[1 2
3 4]

对角矩阵(特殊方阵,只有主对角线(左上角到右下角)不为零其余为零)

[1 0 0
0 2 0
0 0 3]

单位矩阵(特殊的对角矩阵,主对角线为1,其余为0)

[1 0 0
0 1 0
0 0 1]

数量矩阵(特殊的对角矩阵,主对角线为不为0的同一值,其余为0)

[2 0 0
0 2 0
0 0 2]

转置矩阵(原始矩阵的行列互换)

例:
![[Pasted image 20260128170407.png]]
矩阵转置的转置等于原矩阵
(AB)^T = B^TA^T ==> 两个矩阵相乘结果的转置,等于反向相乘各矩阵的转置

逆矩阵(必须是方阵,不是所有矩阵都有逆矩阵)

方阵M,则M的逆矩阵为M^-1
M* M^-1 = M^-1 * M = I(单位矩阵)
如果一个矩阵存在逆矩阵,则称该矩阵可逆(非奇异),反正不可逆(奇异)

![info] 逆矩阵计算:

  1. 确定矩阵为方阵
  2. 计算矩阵的行列式(行列式值为0,则该矩阵没有逆矩阵)
  3. 计算矩阵的代数余子式
  4. 计算标准伴随矩阵(转置代数余子式)
  5. 计算逆矩阵(标准伴随矩阵 / 行列式)

行列式

行列式是一个标量,若矩阵为M则|M|表示矩阵M的行列式
左下左上画对角,线上数值都相乘,数值数量为行列,数量不够对岸取,左下分组加,左上分组减
![[Pasted image 20260128171522.png]]

代数余子式

矩阵M的代数余子式矩阵为C

   [m11 m12 m13       [C11 C12 C13
M = m21 m22 m23    C = C21 C22 C23    
	m31 m32 m33]       C31 C32 C33]

Cij = -1^i+j * 去掉i行j列组成的矩阵的行列式 例:C12 = -1^(1+2) * (m21m33-m31m23)`

逆矩阵特点

逆矩阵的逆矩阵是原矩阵 M^-1^-1 = M
逆矩阵乘原矩阵为单位矩阵 M x M^-1 = I
单位矩阵的逆矩阵是其本身 I = I^-1
转置矩阵的逆矩阵是逆矩阵的转置 M^T^-1 = M-1^T
矩阵相乘后的逆矩阵等于反向相乘各个矩阵的逆矩阵 (AB)^-1 = B^-1 * A^-1
逆矩阵可以计算矩阵变换的反向变化 M^-1(Mv) = (M^-1 * M)v = Iv = v(v为矢量)

正交矩阵

若原方阵和其转置矩阵相乘为单位矩阵,则原矩阵为正交矩阵

  1. 正交矩阵的逆矩阵等于其转置矩阵
  2. 正交矩阵的转置矩阵也是正交矩阵
  3. 正交矩阵的每一行都是单位向量(自己点乘自己结果为1)
  4. 正交矩阵的每一行都彼此互相垂直(彼此点乘结果为0)
  5. 每一列也同上

列矩阵,行矩阵(只有一行或一列的矩阵)

向量以列或行矩阵的形式与矩阵进行计算时顺序不同结果也不同

[!warning] Unity中使用规则
标准线性代数中矩阵和向量的乘法是将向量转成列矩阵进行
Unity也将向量表示为列矩阵进行计算
阅读顺序从右向左,例:M1M2M3V == > 表示先对向量V使用矩阵M3进行变换再用矩阵M2,M1进行变化

矩阵的几何意义

利用矩阵对一个点/向量进行变换(平移、旋转、缩放),常用的几何变换有:线性变化和仿射变换,区别在于是否保持直线的平行性和原点位置
线性变换不影响方向和原点位置
仿射变换会改变原点位置和方向

齐次坐标

就是将一个原本是n维的向量或矩阵用n+1维表示
例:三维向量(x,y,z),它的齐次坐标系就是(x,y,z,w)w的改变可以使其具有不同的含义
例当w=1时表示一个点,w=0时表示一个向量
3x3的矩阵不能直接表示平移变换,所以要给它加一维变成4x4矩阵
3x3矩阵一般称为线性矩阵,4x4矩阵一般称为仿射矩阵

变换矩阵

平移矩阵

[ 1   0   0   tx
  0   1   0   ty
  0   0   1   tz
  0   0   0   1]

[!info] 说明
m部分用来表示旋转和缩放变换
t部分用于表示平移,分别表示xyz平移多少单位
0部分始终为0
右下角始终为1

平移矩阵与点(使用齐次坐标w为1)进行计算表示点(xyz)在3d空间平移了tx,ty,tz个单位

平移矩阵与向量进行计算不会有任何变换

==平移矩阵不是正交矩阵==

旋转矩阵

// 绕X轴旋转β度
[1   0    0   0
 0 cosβ -sinβ 0
 0 sinβ  cosβ 0
 0   0    0   1]
// 绕Y轴旋转β度
[cosβ  0  sinβ  0
 0     1   0    0
 -sinβ 0  cosβ  0
 0     0   0    1]
// 绕Z轴旋转β度
[cosβ  -sinβ  0   0
 sinβ  cosβ   0   0
 0      0     1   0
 0      0     0   1]

旋转矩阵与点或向量的齐次坐标相乘表示绕任意轴旋转β度

旋转矩阵是正交矩阵

缩放矩阵

[kx  0  0  0
 0  ky  0  0
 0   0  kz 0
 0   0  0  1]

kx,ky,kz分别表示xyz轴的缩放因子,当kx=ky=kz时称为统一缩放,否则为非统一缩放

对点的缩放相对于缩放模型大小

对向量的缩放,统一缩放只改变向量的大小(模长),不改变向量的方向
非统一缩放不仅改变向量大小,还可能改变向量的方向
缩放矩阵一般不是正交矩阵,因为kx,ky,kz一般不会是1
缩放矩阵的逆矩阵为:

[1/kx  0  0  0
 0  1/ky  0  0
 0   0  1/kz 0
 0   0  0  1]

复合运算

复合运算就是把平移、旋转等计算组合起来形成复杂的变化过程,变换的结果依赖于变换的顺序
约定的变化顺序为:先缩放后旋转再平移
xyz轴的旋转的顺序为 z => x => y

LICENSED UNDER CC BY-NC-SA 4.0
评论