文章目录
- 左手坐标系和右手坐标系
向量的加法:两向量首尾相接,结果为不相接的首指向尾
向量的减法:被减的向量反向后再相加
向量的点积:
u ⋅ v = u x v x + u y v y + u z v z = ∥ u ∥ ⋅ ∥ v ∥ c o s θ u\cdot v=u_{x}v_{x}+u_{y}v_{y}+u_{z}v_{z}=\Vert u\Vert\cdot\Vert v\Vert cos\theta u⋅v=uxvx+uyvy+uzvz=∥u∥⋅∥v∥cosθ
当 u u u和 v v v都是单位向量时,它们的点积为 c o s θ cos\theta cosθ
点积的一些有用的特性:- 若 u ⋅ v = 0 u·v=0 u⋅v=0,且 u u u或者 v v v不为0向量, 则 u ⊥ v u\perp v u⊥v,两个向量正交。
- 若 u ⋅ v > 0 u·v>0 u⋅v>0,则两向量之间的夹角小于90°。
- 若
u
⋅
v
<
0
u·v<0
u⋅v<0,则两向量之间的夹角小于90°。
向量的叉积:
叉积的结果 p p p与 u u u、 v v v彼此正交。 u × v = − v × u u×v=-v×u u×v=−v×u,需判断两个向量是否为0或者是否相等
p = u × v = [ ( u y v z − u z v y ) , ( u z v x − u x v z ) , ( u x v y − u y v x ) ] p=u\times v=[(u_{y}v_{z}-u_{z}v_y),(u_{z}v_{x}-u_{x}v_{z}),(u_{x}v_{y}-u_{y}v_{x})] p=u×v=[(uyvz−uzvy),(uzvx−uxvz),(uxvy−uyvx)]
如果使用的左手坐标系,可用左手法则判断叉乘的方向(右手坐标系需用右手法)。左手手指沿着第一个向量向第二个向量的方向弯曲,拇指指向的方向就是这两个向量叉积的方向。
矩阵
一个 m × n m×n m×n的矩阵是一个 m m m行 n n n列的矩形数组。
仅包含单行的矩阵为行向量,仅包含单列的矩阵为列向量。
[ a 1 a 2 ⋯ a n ] \begin{bmatrix} a_{1} & a_{2} \cdots & a_{n}\end{bmatrix} [a1a2⋯an] [ a 1 a 2 ⋮ a m ] \begin{bmatrix} a_{1}\\ a_{2}\\ \vdots \\ a_{m}\end{bmatrix} ⎣⎢⎢⎢⎡a1a2⋮am⎦⎥⎥⎥⎤
如果两个向量位数相同且对应的元素也相同,则二者相等A=B、A≠B
标量乘矩阵,结果为用标量与该矩阵的每个元素做乘法后的矩阵。
x
×
[
a
11
⋯
a
1
n
⋮
⋱
⋮
a
m
1
⋯
a
m
n
]
=
[
(
x
×
a
11
)
⋯
(
x
×
a
1
n
)
⋮
⋱
⋮
(
x
×
a
m
1
)
⋯
(
x
×
a
m
n
)
]
x\times\begin{bmatrix} a_{11}&\cdots&a_{1n}\\ \vdots&\ddots&\vdots\\ a_{m1}&\cdots&a_{mn} \end{bmatrix}=\begin{bmatrix} (x\times a_{11})&\cdots&(x\times a_{1n})\\ \vdots&\ddots&\vdots\\ (x\times a_{m1})&\cdots&(x\times a_{mn}) \end{bmatrix}
x×⎣⎢⎡a11⋮am1⋯⋱⋯a1n⋮amn⎦⎥⎤=⎣⎢⎡(x×a11)⋮(x×am1)⋯⋱⋯(x×a1n)⋮(x×amn)⎦⎥⎤
两个矩阵只有维数相同时可做加法,结果为对应元素相加得到的矩阵
[
a
11
⋯
a
1
n
⋮
⋱
⋮
a
m
1
⋯
a
m
n
]
+
[
b
11
⋯
b
1
n
⋮
⋱
⋮
b
m
1
⋯
b
m
n
]
=
[
a
11
+
b
11
)
⋯
a
1
n
+
b
1
n
)
⋮
⋱
⋮
(
a
m
1
+
b
m
1
)
⋯
(
a
m
n
+
b
m
n
)
]
\begin {bmatrix}a_{11}&\cdots&a_{1n}\\ \vdots &\ddots&\vdots\\ a_{m1}&\cdots&a_{mn} \end{bmatrix}+\begin{bmatrix} b_{11}&\cdots&b_{1n}\\ \vdots&\ddots&\vdots\\ b_{m1}&\cdots&b_{mn} \end{bmatrix}=\begin{bmatrix} a_{11}+b_{11})&\cdots&a_{1n}+b_{1n})\\ \vdots &\ddots &\vdots\\ (a_{m1}+b_{m1})&\cdots&(a_{mn}+b_{mn}) \end{bmatrix}
⎣⎢⎡a11⋮am1⋯⋱⋯a1n⋮amn⎦⎥⎤+⎣⎢⎡b11⋮bm1⋯⋱⋯b1n⋮bmn⎦⎥⎤=⎣⎢⎡a11+b11)⋮(am1+bm1)⋯⋱⋯a1n+b1n)⋮(amn+bmn)⎦⎥⎤
只有矩阵A的列数等于矩阵B的行数时候,两个矩阵才可做乘法
[
a
11
a
12
⋯
a
1
x
a
21
a
22
⋯
a
2
x
⋮
⋮
⋱
⋮
a
m
1
a
m
2
⋯
a
m
x
]
×
[
b
11
b
12
⋯
b
1
n
b
21
b
22
⋯
b
2
n
⋮
⋮
⋱
⋮
b
x
1
b
x
2
⋯
b
x
n
]
=
[
(
a
11
b
11
+
a
12
b
21
⋯
a
1
x
b
x
1
)
(
a
11
b
12
+
a
12
b
22
⋯
a
1
x
b
x
2
)
⋯
(
a
11
b
1
n
+
a
12
b
2
n
⋯
a
1
x
b
x
n
)
(
a
21
b
11
+
a
22
b
21
⋯
a
2
x
b
x
1
)
(
a
21
b
12
+
a
22
b
22
⋯
a
2
x
b
x
2
)
⋯
(
a
21
b
1
n
+
a
22
b
2
n
⋯
a
2
x
b
x
n
)
⋮
⋮
⋱
⋮
(
a
m
1
b
11
+
a
m
2
b
21
⋯
a
m
x
b
x
1
)
(
a
m
1
b
12
+
a
m
2
b
22
⋯
a
m
x
b
x
2
)
⋯
(
a
m
1
b
1
n
+
a
m
2
b
2
n
⋯
a
m
x
b
x
n
)
]
\begin{bmatrix} a_{11}&a_{12}&\cdots&a_{1x}\\ a_{21}&a_{22}&\cdots&a_{2x}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mx} \end{bmatrix}\times\begin{bmatrix} b_{11}&b_{12}&\cdots&b_{1n}\\ b_{21}&b_{22}&\cdots&b_{2n}\\ \vdots&\vdots &\ddots &\vdots\\ b_{x1}&b_{x2}&\cdots&b_{xn} \end{bmatrix}=\begin{bmatrix} (a_{11}b_{11}+a_{12}b_{21}\cdots a_{1x}b_{x1})&(a_{11}b_{12}+a_{12}b_{22}\cdots a_{1x}b_{x2})&\cdots&(a_{11}b_{1n}+a_{12}b_{2n}\cdots a_{1x}b_{xn})\\ (a_{21}b_{11}+a_{22}b_{21}\cdots a_{2x}b_{x1})&(a_{21}b_{12}+a_{22}b_{22}\cdots a_{2x}b_{x2})&\cdots&(a_{21}b_{1n}+a_{22}b_{2n}\cdots a_{2x}b_{xn})\\ \vdots&\vdots&\ddots &\vdots\\ (a_{m1}b_{11}+a_{m2}b_{21}\cdots a_{mx}b_{x1})&(a_{m1}b_{12}+a_{m2}b_{22}\cdots a_{mx}b_{x2})&\cdots&(a_{m1}b_{1n}+a_{m2}b_{2n}\cdots a_{mx}b_{xn}) \end{bmatrix}
⎣⎢⎢⎢⎡a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1xa2x⋮amx⎦⎥⎥⎥⎤×⎣⎢⎢⎢⎡b11b21⋮bx1b12b22⋮bx2⋯⋯⋱⋯b1nb2n⋮bxn⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡(a11b11+a12b21⋯a1xbx1)(a21b11+a22b21⋯a2xbx1)⋮(am1b11+am2b21⋯amxbx1)(a11b12+a12b22⋯a1xbx2)(a21b12+a22b22⋯a2xbx2)⋮(am1b12+am2b22⋯amxbx2)⋯⋯⋱⋯(a11b1n+a12b2n⋯a1xbxn)(a21b1n+a22b2n⋯a2xbxn)⋮(am1b1n+am2b2n⋯amxbxn)⎦⎥⎥⎥⎤
单位矩阵:除了主对角线上元素为1外,其余元素均为0,并且是方阵。
单位矩阵与其他矩阵做乘法时,结果依旧为其他矩阵。
逆矩阵
参考:https://www.sohu.com/a/226465524_224832?qq-pf-to=pcqq.c2c
一个
n
×
n
n×n
n×n的矩阵M的逆矩阵也是一个
n
×
n
n×n
n×n的矩阵,用符号
M
−
1
M^{-1}
M−1表示。
- 可逆矩阵一定是方阵。
- 如果矩阵A是可逆的,其逆矩阵是唯一的。
- A的逆矩阵的逆矩阵还是A
- 可逆矩阵A的转置矩阵 A T A^{T} AT也可逆,并且 ( A T ) − 1 = ( A − 1 ) T (A^{T})^{-1}=(A^{-1})^{T} (AT)−1=(A−1)T(转置的逆等于逆的转置)
- 一个矩阵与其逆矩阵的乘积为单位矩阵: M M − 1 = M − 1 M = I MM^{-1}=M^{-1}M=I MM−1=M−1M=I。
- 两个可逆矩阵的乘积依然可逆。
- 矩阵可逆当且仅当它是满秩矩阵。
- 若矩阵A可逆,则矩阵A满足消去定律。若AB=AC,则B=C,有点迷,搬运工还是原封搬运过来
矩阵的转置:
矩阵的转置可通过交换矩阵的行和列来实现。所以一个 m × n m×n m×n的矩阵转置是一个 n × m n×m n×m矩阵。用符号 M T M^{T} MT表示矩阵 M M M的转置。
矩阵的变换
平移变换
想要将向量
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)平移
(
p
x
,
p
y
,
p
z
)
(p_{x},p_{y},p_{z})
(px,py,pz)个单位时候,我们只需将该向量拓展为
(
x
,
y
,
z
,
1
)
(x,y,z,1)
(x,y,z,1)后与
T
(
p
)
T(p)
T(p)矩阵相乘即可。
V
T
(
p
)
=
[
x
y
z
1
]
[
1
0
0
0
0
1
0
0
0
0
1
0
p
x
p
y
p
z
1
]
=
[
x
+
p
x
y
+
p
y
z
+
p
z
1
]
VT(p)=\begin{bmatrix}x&y&z&1\end{bmatrix} \begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\p_{x}&p_{y}&p_{z}&1\end{bmatrix}= \begin{bmatrix}x+p_{x}&y+p_{y}&z+p_{z}&1\end{bmatrix}
VT(p)=[xyz1]⎣⎢⎢⎡100px010py001pz0001⎦⎥⎥⎤=[x+pxy+pyz+pz1]
平移矩阵的逆矩阵可简单的通过对平移向量p取负得到
T
−
1
=
T
(
−
p
)
=
[
1
0
0
0
0
1
0
0
0
0
1
0
−
p
x
−
p
y
−
p
z
1
]
T^{-1}=T(-p)=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\-p_{x}&-p_{y}&-p_{z}&1\end{bmatrix}
T−1=T(−p)=⎣⎢⎢⎡100−px010−py001−pz0001⎦⎥⎥⎤
旋转矩阵
用如下矩阵将一个向量绕着x轴旋转
θ
\theta
θ弧度。
推导需要用到和差角公式
c
o
s
(
α
+
β
)
=
c
o
s
α
c
o
s
β
−
s
i
n
α
s
i
n
β
cos(\alpha+\beta)=cos\alpha cos\beta-sin\alpha sin\beta
cos(α+β)=cosαcosβ−sinαsinβ
c
o
s
(
α
−
β
)
=
c
o
s
α
c
o
s
β
+
s
i
n
α
s
i
n
β
cos(\alpha-\beta)=cos\alpha cos\beta+sin\alpha sin\beta
cos(α−β)=cosαcosβ+sinαsinβ
s
i
n
(
α
±
β
)
=
s
i
n
α
c
o
s
β
±
c
o
s
α
s
i
n
β
sin(\alpha\pm\beta)=sin\alpha cos\beta\pm cos\alpha sin\beta
sin(α±β)=sinαcosβ±cosαsinβ
**注意:**当沿着旋转轴指向原点的方向观察时,角度是按顺时针方向度量的。
V
X
(
θ
)
=
[
x
y
z
1
]
[
1
0
0
0
0
c
o
s
θ
s
i
n
θ
0
0
−
s
i
n
θ
c
o
s
θ
0
0
0
0
1
]
=
[
x
(
y
∗
c
o
s
θ
−
z
∗
s
i
n
θ
)
(
y
∗
s
i
n
θ
+
z
∗
c
o
s
θ
)
1
]
VX(\theta)=\begin{bmatrix}x&y&z&1\end{bmatrix} \begin{bmatrix}1&0&0&0\\0&cos\theta&sin\theta&0\\0&-sin\theta&cos\theta&0\\0&0&0&1\end{bmatrix}= \begin{bmatrix}x&(y*cos\theta-z*sin\theta)&(y*sin\theta+z*cos\theta)&1\end{bmatrix}
VX(θ)=[xyz1]⎣⎢⎢⎡10000cosθ−sinθ00sinθcosθ00001⎦⎥⎥⎤=[x(y∗cosθ−z∗sinθ)(y∗sinθ+z∗cosθ)1]
用如下矩阵将一个向量绕着y轴旋转
θ
\theta
θ弧度。
V
Y
(
θ
)
=
[
x
y
z
1
]
[
c
o
s
θ
0
−
s
i
n
θ
0
0
1
0
0
s
i
n
θ
0
c
o
s
θ
0
0
0
0
1
]
=
[
(
x
∗
c
o
s
θ
+
z
∗
s
i
n
θ
)
y
(
z
∗
c
o
s
θ
−
x
∗
s
i
n
θ
)
1
]
VY(\theta)=\begin{bmatrix}x&y&z&1\end{bmatrix} \begin{bmatrix}cos\theta&0&-sin\theta&0\\0&1&0&0\\sin\theta&0&cos\theta&0\\0&0&0&1\end{bmatrix}= \begin{bmatrix}(x*cos\theta+z*sin\theta)&y&(z*cos\theta-x*sin\theta)&1\end{bmatrix}
VY(θ)=[xyz1]⎣⎢⎢⎡cosθ0sinθ00100−sinθ0cosθ00001⎦⎥⎥⎤=[(x∗cosθ+z∗sinθ)y(z∗cosθ−x∗sinθ)1]
用如下矩阵将一个向量绕着z轴旋转
θ
\theta
θ弧度。
V
Z
(
θ
)
=
[
x
y
z
1
]
[
c
o
s
θ
s
i
n
θ
0
0
−
s
i
n
θ
c
o
s
θ
0
0
0
0
1
0
0
0
0
1
]
=
[
(
x
∗
c
o
s
θ
−
y
∗
s
i
n
θ
)
(
x
∗
s
i
n
θ
+
y
∗
c
o
s
θ
)
z
1
]
VZ(\theta)=\begin{bmatrix}x&y&z&1\end{bmatrix} \begin{bmatrix}cos\theta&sin\theta&0&0\\-sin\theta&cos\theta&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}= \begin{bmatrix}(x*cos\theta-y*sin\theta)&(x*sin\theta+y*cos\theta)&z&1\end{bmatrix}
VZ(θ)=[xyz1]⎣⎢⎢⎡cosθ−sinθ00sinθcosθ0000100001⎦⎥⎥⎤=[(x∗cosθ−y∗sinθ)(x∗sinθ+y∗cosθ)z1]
比例变换矩阵
如果想让一个向量放大q倍,可令该向量与下面矩阵相乘
V
S
(
q
)
=
[
x
y
z
1
]
[
q
x
0
0
0
0
q
y
0
0
0
0
q
z
0
0
0
0
1
]
=
[
(
x
∗
q
x
)
(
y
∗
q
y
)
(
z
∗
q
z
)
1
]
VS(q)=\begin{bmatrix}x&y&z&1\end{bmatrix} \begin{bmatrix}q_{x}&0&0&0\\0&q_{y}&0&0\\0&0&q_{z}&0\\0&0&0&1\end{bmatrix}= \begin{bmatrix}(x*q_{x})&(y*q_{y})&(z*q_{z})&1\end{bmatrix}
VS(q)=[xyz1]⎣⎢⎢⎡qx0000qy0000qz00001⎦⎥⎥⎤=[(x∗qx)(y∗qy)(z∗qz)1]
比例矩阵的逆矩阵可简单的通过对比例向量q取倒数得到
S
−
1
=
S
(
1
q
x
,
1
q
y
,
1
q
z
)
=
[
1
q
x
0
0
0
0
1
q
y
0
0
0
0
1
q
z
0
0
0
0
1
]
S^{-1}=S(\frac{1}{q_{x}},\frac{1}{q_{y}},\frac{1}{q_{z}})=\begin{bmatrix}\frac{1}{q_{x}}&0&0&0\\0&\frac{1}{q_{y}}&0&0\\0&0&\frac{1}{q_{z}}&0\\0&0&0&1\end{bmatrix}
S−1=S(qx1,qy1,qz1)=⎣⎢⎢⎡qx10000qy10000qz100001⎦⎥⎥⎤
平面
可用一个向量
n
n
n和平面上一点
p
0
p_{0}
p0来描述一个平面,其中向量
n
n
n称为平面的法向量,该向量与平面垂直。直线上任意一点p满足下式:
n
⋅
(
p
−
p
0
)
=
0
n·(p-p_{0})=0
n⋅(p−p0)=0
另外,平面更常用的形式为:
0
=
n
x
∗
p
x
+
n
y
∗
p
y
+
n
z
∗
p
z
+
d
=
n
⋅
p
+
d
=
0
0=n_{x}*p_{x}+n_{y}*p_{y}+n_{z}*p_{z}+d=n·p+d=0
0=nx∗px+ny∗py+nz∗pz+d=n⋅p+d=0
该方程主要考察点与平面的关系
若
n
⋅
p
+
d
=
0
n·p+d=0
n⋅p+d=0,则点p在平面上。
若
n
⋅
p
+
d
>
0
n·p+d>0
n⋅p+d>0,则点p位于平面的前方,并处于平面的正半区域。
若
n
⋅
p
+
d
<
0
n·p+d<0
n⋅p+d<0,则点p位于平面的后方,并处于平面的负半区域。
另外,平面上两个不共线向量的叉积也能得出法向量,因此也可求出平面公式。
平面的规范化:
如果要规范化已知平面的法向量,需要注意法向量的模会影响常量d的值,规范化时,必须重新计算d的值。
我们可以将平面看做是4D向量,并将它与所期望的变换矩阵的逆转置相乘来实施变换,注意:平面的法向量必须先规范化。
我们用4D齐次向量来同时表示点和向量。当表示向量时,令w分量为0;表示点时,令w为1。如果w≠0且w≠1,则我们称向量(x,y,z,w)位于齐次空间中,并可令其每个分量除以w而映射到3D空间。