矩阵
一个4x3矩阵(4行,3列)
方阵
行数和列数相同的矩阵
对角矩阵
所有非对角元素为0
单位矩阵
向量作为矩阵
一个n维向量能被当做1xN矩阵或Nx1矩阵。
矩阵的转置
沿着矩阵的对角线翻转
向量的转置
标量和向量的乘法
矩阵和矩阵相乘
2x2矩阵相乘
3x3矩阵相乘
乘法定律
不满足交换率 (
AB!=BA
A
B
!
=
B
A
)
满足结合律 (
(AB)C=A(BC)
(
A
B
)
C
=
A
(
B
C
)
和标量,向量相乘同样满足)
矩阵积的转置相当于先转置矩阵然后以相反的顺序相乘
向量和矩阵的乘法
1x3矩阵乘3x3矩阵
3x3矩阵乘3x1矩阵
不满足之前提到的规律
DX中使用行向量,openGL使用列向量
几何解释
一般来说,方阵能描述任意线性变换
旋转
缩放
投影
镜像
仿射
根据三角形法则可以将向量转化为以下形式
p, q, r 为 +x, +y, +z 方向的单位基向量
v=px+qy+rz
v
=
p
x
+
q
y
+
r
z
p, q, r 为行构建3x3矩阵
矩阵的每一行都能解释为旋转后的基向量
2D中的变换
3D中的变换
旋转
2D旋转矩阵
3D旋转
旋转需要知道方向的正负(左手法则,右手法则)
大拇指指向旋转轴的正方向,此时,四指玩去的方向就是旋转的正方形
绕X轴旋转
绕Y轴旋转
绕Z轴旋转
绕任意轴旋转
v′=vR(n,θ) v ′ = v R ( n , θ ) (n为单位向量,θ为旋转角度)
推导
将V分解为平行于n的VⅡ,和垂直于n的V⊥
V=VⅡ+V⊥
V
=
V
Ⅱ
+
V
⊥
V′=VⅡ′+V⊥′
V
′
=
V
Ⅱ
′
+
V
⊥
′
∵VⅡ′//n
∵
V
Ⅱ
′
/
/
n
∴V′=VⅡ+V⊥′
∴
V
′
=
V
Ⅱ
+
V
⊥
′
∵VⅡ是V在n上的投影
∵
V
Ⅱ
是
V
在
n
上
的
投
影
∴VⅡ=(nV)n|n|2
∴
V
Ⅱ
=
(
n
V
)
n
|
n
|
2
∵n为单位向量
∵
n
为
单
位
向
量
∴VⅡ=(nV)n
∴
V
Ⅱ
=
(
n
V
)
n
∵V=VⅡ+V⊥
∵
V
=
V
Ⅱ
+
V
⊥
∴V⊥=V−VⅡ
∴
V
⊥=
V
−
V
Ⅱ
∴V⊥=V−(nV)n
∴
V
⊥=
V
−
(
n
V
)
n
假设w为同时垂直于VⅡ,V⊥的向量,并且长度和V⊥相同,w和V⊥同时垂直于n的平面且w是V⊥绕n旋转90度的结果
假
设
w
为
同
时
垂
直
于
V
Ⅱ
,
V
⊥
的
向
量
,
并
且
长
度
和
V
⊥
相
同
,
w
和
V
⊥
同
时
垂
直
于
n
的
平
面
且
w
是
V
⊥
绕
n
旋
转
90
度
的
结
果
∴w=n×V⊥
∴
w
=
n
×
V
⊥
=n×(V−VⅡ)
=
n
×
(
V
−
V
Ⅱ
)
=n×V−n×VⅡ
=
n
×
V
−
n
×
V
Ⅱ
=n×V−0
=
n
×
V
−
0
=n×V
=
n
×
V
V⊥′=V⊥cosθ+wsinθ
V
⊥
′
=
V
⊥
c
o
s
θ
+
w
s
i
n
θ
=(V−(nV)n)cosθ+(n×V)sinθ
=
(
V
−
(
n
V
)
n
)
c
o
s
θ
+
(
n
×
V
)
s
i
n
θ
V′=V⊥′+VⅡ
V
′
=
V
⊥
′
+
V
Ⅱ
=(V−(nV)n)cosθ+(n×V)sinθ+(nV)n
=
(
V
−
(
n
V
)
n
)
c
o
s
θ
+
(
n
×
V
)
s
i
n
θ
+
(
n
V
)
n
已经得到V’与v,n,θ的关系了,所以可以求出个基向量
缩放
2D缩放
3D缩放
沿任意方向缩放
n为缩放方向上的单位向量,k为缩放系数
n
为
缩
放
方
向
上
的
单
位
向
量
,
k
为
缩
放
系
数
V′=VⅡ′+V⊥′
V
′
=
V
Ⅱ
′
+
V
⊥
′
∵V⊥′⊥n
∵
V
⊥
′
⊥
n
∴V⊥′=V⊥
∴
V
⊥
′
=
V
⊥
∴V′=VⅡ′+V⊥
∴
V
′
=
V
Ⅱ
′
+
V
⊥
VⅡ′=kVⅡ
V
Ⅱ
′
=
k
V
Ⅱ
∴V′=kVⅡ+V⊥
∴
V
′
=
k
V
Ⅱ
+
V
⊥
∵V⊥=V−VⅡ
∵
V
⊥=
V
−
V
Ⅱ
VⅡ=(nV)n
V
Ⅱ
=
(
n
V
)
n
∴V′=k(nV)n+V−(nV)n
∴
V
′
=
k
(
n
V
)
n
+
V
−
(
n
V
)
n
=V+(k−1)(nV)n
=
V
+
(
k
−
1
)
(
n
V
)
n
所以可以得出个基向量
2D缩放
3D缩放
镜像
2D镜像
3D镜像
组合变换
最常见的比如mvp矩阵
变换分类
线性变换
F(a+b)=F(a)+F(b)
F
(
a
+
b
)
=
F
(
a
)
+
F
(
b
)
F(ka)=kF(a)
F
(
k
a
)
=
k
F
(
a
)