02 数学部分(二、向量和坐标系)
来源:3B1B的视频、《3D数学基础》
文章目录
1、向量(Vector)
①一个向量
我们表示为 ( x a , y a ) (x_a, y_a) (xa,ya),或者写成矩阵的形式: a = [ x a y a ] a=\begin{bmatrix}x_a\\y_a\end{bmatrix} a=[xaya],为了方便,我们也写成 a T = [ x a y a ] a^T=\begin{bmatrix} x_a\,\,\, y_a \end{bmatrix} aT=[xaya]。
②点乘(dot product)
$ \mathbf{a\cdot b=||a||,,||b||} ,cos\phi $。
点乘也满足以下交换律:
a
⋅
b
=
b
⋅
a
a
⋅
(
b
+
c
)
=
a
⋅
b
+
a
⋅
c
(
k
a
)
⋅
b
=
a
⋅
(
k
b
)
=
k
a
⋅
b
\mathbf{a\cdot b=b \cdot a \\ a\cdot (b+c)=a\cdot b+a\cdot c \\ }(k\mathbf{a)\cdot b=a\cdot (}k\mathbf{b)=}k\mathbf{a\cdot b}
a⋅b=b⋅aa⋅(b+c)=a⋅b+a⋅c(ka)⋅b=a⋅(kb)=ka⋅b
如果使用了笛卡尔坐标系,则有:
a
⋅
b
=
x
a
x
b
+
y
a
y
b
+
z
a
z
b
\mathbf{a\cdot b}=x_ax_b+y_ay_b+z_az_b
a⋅b=xaxb+yayb+zazb
点乘的运用:
a.用于一个向量在另一个方向上的投影,a在b方向上的投影:$\mathbf{a\longrightarrow b=||a||},,cos\phi ,=,,,\frac{\mathbf{a\cdot b}}{\mathbf{||b||}} $。
b.分解一个向量:可以把 b 分解成 a 方向和 垂直于 a 方向的两个方向,即:
c.计算是否是相同方向的,比如图中,b 和 a 是被认为是 同向的,而 c 和 a是反向的。我们使用 点乘,正数则是同向,负数则是反向。而且,如果是单位向量相乘的话,越接近1则越靠近,接近 -1 则说明方向完全相反:
③叉乘(Cross Product)
通常用于三维向量,返回一个垂直于前两个向量的向量,其长度为与向量a和b的夹角有关:
∣
∣
a
×
b
=
∣
∣
a
∣
∣
∣
∣
b
∣
∣
s
i
n
ϕ
||\mathbf{a}\times \mathbf{b}=\mathbf{||a||\,||b||}sin\phi
∣∣a×b=∣∣a∣∣∣∣b∣∣sinϕ
因为有两个垂直于a和b形成的平面,按照习俗,我们有常常采用右手坐标系来确定它实际的方向:
x
×
y
=
+
z
,
y
×
x
=
−
z
,
y
×
z
=
+
x
,
z
×
y
=
−
x
,
z
×
x
=
+
y
,
x
×
z
=
−
y
.
x × y = +z,\\ y × x = −z,\\ y × z = +x,\\ z × y = −x,\\ z × x = +y,\\ x × z = −y.
x×y=+z,y×x=−z,y×z=+x,z×y=−x,z×x=+y,x×z=−y.
此外,一个向量叉乘自己为0,即:
x
×
x
=
0
\mathbf{x × x = 0}
x×x=0。
叉乘有以下的一些性质:
a
×
(
b
+
c
)
=
a
×
b
+
a
×
c
a
×
(
k
b
)
=
k
(
a
×
b
)
a
×
b
=
−
(
b
×
a
)
\mathbf{a\times(b+c)=a\times b+a\times c}\\ \mathbf{a}\times(k\mathbf{b})=k(\mathbf{a\times b})\\ \mathbf{a\times b=-(b\times a) }
a×(b+c)=a×b+a×ca×(kb)=k(a×b)a×b=−(b×a)
,在笛卡尔坐标系中:
a
×
b
=
(
y
a
z
b
−
z
a
y
b
,
z
a
x
b
−
x
a
z
b
,
x
a
y
b
−
y
a
x
b
)
.
\mathbf{a × b} = (y_az_b − z_ay_b, z_ax_b − x_az_b, x_ay_b − y_ax_b).
a×b=(yazb−zayb,zaxb−xazb,xayb−yaxb).
④单位向量(unit vector)
一个向量除以它本身的长度就是它的单位向量了,$\hat{a} =\frac{a}{|a|} , 两 个 向 量 之 间 的 夹 角 可 以 通 过 单 位 向 量 来 计 算 : ,两个向量之间的夹角可以通过单位向量来计算: ,两个向量之间的夹角可以通过单位向量来计算:cos\theta =\hat{a}\cdot\hat{b}$。
⑤正交坐标系
只要三个向量满足以下条件,就能成为坐标系:
∣
∣
u
⃗
∣
∣
=
∣
∣
v
⃗
∣
∣
=
∣
∣
w
⃗
∣
∣
=
1
u
⃗
⋅
v
⃗
=
v
⃗
⋅
w
⃗
=
u
⃗
⋅
w
⃗
=
0
w
⃗
=
u
⃗
⋅
v
⃗
||\vec{u}||=||\vec{v}||=||\vec{w}||=1 \\ \vec{u}\cdot\vec{v} =\vec{v}\cdot\vec{w} =\vec{u}\cdot\vec{w} =0 \\ \vec{w}=\vec{u}\cdot\vec{v}
∣∣u∣∣=∣∣v∣∣=∣∣w∣∣=1u⋅v=v⋅w=u⋅w=0w=u⋅v
所以,用人话解释:1.三个都是单位向量。2.互相垂直。3.两个的叉乘结果是另外一个。
现在,对于空间内任意一个向量 p 有:
p
⃗
=
(
p
⃗
⋅
u
⃗
)
u
⃗
+
(
p
⃗
⋅
v
⃗
)
+
(
p
⃗
⋅
w
⃗
)
w
⃗
\vec{p}=(\vec{p}\cdot\vec{u})\vec{u}+(\vec{p}\cdot\vec{v})+(\vec{p}\cdot\vec{w})\vec{w}
p=(p⋅u)u+(p⋅v)+(p⋅w)w
也就是每个向量在坐标上的点乘(即在对应坐标轴上的投影)乘以其单位向量。
⑥点乘的意义
实际上,两个向量相乘的结果和 一个降维矩阵和向量相乘的结果一致,也就是:
向
量
相
乘
:
[
a
b
]
⋅
[
c
d
]
=
a
c
+
b
d
降
维
变
换
矩
阵
乘
以
向
量
:
[
a
b
]
⋅
[
c
d
]
=
a
c
+
b
d
向量相乘:\begin{bmatrix} a \\b \end{bmatrix} \cdot \begin{bmatrix} c \\d \end{bmatrix}=ac+bd \\ 降维变换矩阵乘以向量: \begin{bmatrix} a &b \end{bmatrix} \cdot \begin{bmatrix} c \\d \end{bmatrix}=ac+bd
向量相乘:[ab]⋅[cd]=ac+bd降维变换矩阵乘以向量:[ab]⋅[cd]=ac+bd
这样的降维矩阵所做的事情就是把空间中的向量都映射到 图中黄色向量 所在的数轴上,即把空间中所有的二维向量压缩到了一维的坐标轴上,也就是 投影 了,将空间中任意的一个向量投影到 黄色向量 上,再乘以 黄色向量 的长度。这和 点乘 其实也是点乘可以被当成的意义了。在3B1B的线性代数合集中有讲到。
也就是说,空间中任意一个向量和这个 黄色向量 相乘,其结果等于 它自己 在黄色向量上的投影长度乘以黄色向量的长度。这个结论也与公式相符合:
∣
a
∣
∣
b
∣
c
o
s
α
|a||b|cos\alpha
∣a∣∣b∣cosα。
⑦叉乘的意义:叉乘的结果满足以下两个个条件:
a.叉乘的长度 = 这两个向量所形成的四边形的面积,也就是它们所组成的矩阵的 行列式 的长度。
b.其方向垂直于这两个叉乘向量的平面,而满足 右手定则。
也就是说,叉乘会创造一个新的向量,其方向垂直于两个基向量的长度,其长度也就是那两个矩阵所形成的面积。
叉乘的计算方法:
[
x
1
y
1
z
1
]
×
[
x
2
y
2
z
2
]
=
[
y
1
z
2
−
z
1
y
2
z
1
x
2
−
x
1
z
2
x
1
y
2
−
y
1
x
2
]
\begin{bmatrix} x_1\\y_1\\z_1\end{bmatrix} \times \begin{bmatrix} x_2\\y_2\\z_2\end{bmatrix} =\begin{bmatrix}y_1z_2-z_1y_2\\z_1x_2-x_1z_2\\x_1y_2-y_1x_2\end{bmatrix}
⎣⎡x1y1z1⎦⎤×⎣⎡x2y2z2⎦⎤=⎣⎡y1z2−z1y2z1x2−x1z2x1y2−y1x2⎦⎤
当点乘和叉乘在一起时,叉乘优先计算:$\mathbf{a\cdot b\times c=a\cdot b \times c}
,
交
换
律
:
,交换律:
,交换律:\mathbf{a\times b =-(b \times a)} $
2、矩阵(matric)
①单位矩阵
从左到右的那个对角线都是1,其余都是0。
②矩阵的逆
如果存在一个矩阵乘以原来的矩阵,结果是 单位矩阵,则这是矩阵的逆: A A − 1 = A − 1 A = I AA^{-1}=A^{-1}A=I AA−1=A−1A=I。
③矩阵的转置
把矩阵的行和列都互换就好了。
④矩阵应用
点乘,转换为乘以它的转置:
a
⃗
⋅
b
⃗
=
a
⃗
T
b
⃗
=
(
x
a
y
a
z
a
)
(
x
b
y
b
z
b
)
=
(
x
a
x
b
+
y
a
y
b
+
z
a
z
b
)
\vec{a}\cdot\vec{b}=\vec{a}^T\vec{b}=\left ( x_a \,y_a\,z_a\right)\begin{pmatrix}x_b \\ y_b\\z_b\end{pmatrix}=(x_ax_b+y_ay_b+z_az_b)
a⋅b=aTb=(xayaza)⎝⎛xbybzb⎠⎞=(xaxb+yayb+zazb)
叉乘,转换为两个矩阵相乘:
a
⃗
×
b
⃗
=
A
∗
b
=
(
0
−
z
a
y
a
z
a
0
−
x
a
−
y
a
x
a
0
)
(
x
b
y
b
z
b
)
\vec{a}\times \vec{b}=A^\ast b=\begin{pmatrix}0 & -z_a &y_a \\ z_a& 0 & -x_a\\-y_a&x_a &0\end{pmatrix}\begin{pmatrix}x_b \\ y_b\\z_b\end{pmatrix}
a×b=A∗b=⎝⎛0za−ya−za0xaya−xa0⎠⎞⎝⎛xbybzb⎠⎞
⑤矩阵在图形学中的意义
将原本坐标系的基向量: j ^ \hat{j} j^ 和 i ^ \hat{i} i^ 作相应的线性变换而得到的。如下图:
即,我们说这个矩阵对整个空间进行了线性变换,我们只观察 两个基向量 和 我们关注的黄色向量 ,开始的基向量坐标分别是:
[
1
,
0
]
[
0
,
1
]
[1, 0] [0,1]
[1,0][0,1]。经过矩阵线性变换,如上例,变成了
[
−
1
,
2
]
[
3
,
0
]
[-1, 2] [3, 0]
[−1,2][3,0],整个空间也发生了相应的变换。我们所求的 黄色坐标 也变换成了一个新的向量。,我们将两个挨着的基向量放在一起:
[
−
1
3
2
0
]
\begin{bmatrix} -1 & 3\\ 2 &0\end{bmatrix}
[−1230],这就是这个变换矩阵了。
这样的思想可以同时运用在所有矩阵上,包括:平移矩阵,旋转矩阵,降维矩阵等。3b1b的视频讲述了这样的事情。
⑥非方阵矩阵
对于非方阵的矩阵来说,它们不仅涉及到变换,也涉及到维度的变换,
比如:3X2的矩阵 乘以 2X1的向量,便是把一个二维向量,直接拓展到 三维的空间。也就是两个基向量都被拓展到了3维空间,那么那个2X1的向量也自然到了3维空间了。
类似,2X3的矩阵 乘以 3X1的向量,便是把一个3维空间的向量压缩到2维空间中。三个基向量都只剩下两个维度了。
⑦行列式
比如一个2X2的矩阵的 行列式,就是这两个向量的平行四边形的面积,如果它们左右的位置交换过后,它们的面积也可以是负数。如果第一个乘积项在前,那么它应该在另一个向量的左边,如果在右边则算出来应该就是负数了。
-
二维表示:二维行列式中两个二维向量构成的 面积
符号取决于 区域是否发生了翻转变换(翻转为 负)
行列式的值与所选坐标系无关
-
三维 表示:三维行列式中三个三维向量构成的 体积
符号取决于 构成矩阵的这三个向量是否满足右手定则(不满足为 负)
⑧行列式的特殊情况
- 当线性变化后 区域 面积 为 0 时(点,线)
说明发生了由 高维到低维 的线性变换
- 当线性变化后 区域 体积 为 0 时(点,线,面)
- 当线性变化后 比例为 负数 时,平面翻转