Reference:
点
是空间中的最基本元素,没有长度,没有体积。把两个点连接起来,就构成了向量
。向量
可以看成从某点指向另一个点的一个箭头。请不要把向量与它的坐标
这两个概念混淆。
一个向量是空间当中的一样东西,比如
a
\mathbf{a}
a。这里的
a
\mathbf{a}
a 并不需要和若干个实数相关联。只有当我们指定这个三维空间中的某个坐标系
时,才可以谈论该向量在此坐标系下的坐标,也就是找到若干个实数对应这个向量。
用线性代数的知识来说,三维空间中的某个点的坐标也可以用
R
3
\mathbb{R}^3
R3 来描述。假设在这个线性空间内,我们找到了该空间的一组基
(
e
1
,
e
2
,
e
3
)
(\mathbf{e_1}, \mathbf{e_2}, \mathbf{e_3})
(e1,e2,e3),那么,任意向量
a
\mathbf{a}
a 在这组基下就有一个坐标:
a
=
[
e
1
,
e
2
,
e
3
]
[
a
1
a
2
a
3
]
=
a
1
e
1
+
a
2
e
2
+
a
3
e
3
\boldsymbol{a}=\left[\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3\right]\left[a1a2a3
这里 ( a 1 , a 2 , a 3 ) T (a_1, a_2, a_3)^T (a1,a2,a3)T 称为 a \mathbf{a} a 在此基下的坐标。坐标的具体取值,一是和向量本身有关,二是和坐标系(基)的选取有关。
坐标系通常由
3
3
3 个正交的坐标轴组成(尽管也可以有非正交的,但实际中很少见)。例如,当给定
x
x
x 和
y
y
y 轴时,
z
z
z 轴就可以通过右手(或左手)法则由
x
×
y
x\times y
x×y 定义出来。根据定义方式的不同,坐标系又分为右手系
和左手系
。左手系的第
3
3
3 个轴与右手系方向相反。大部分
3
D
3D
3D 程序库使用右手系(如 OpenGL,3D Max等),也有部分库使用左手系(如 Unity、Direct3D 等)。
现在给出内外积的运算方式:
内积
对于
a
,
b
∈
R
3
\mathbf{a},\mathbf{b}\in\mathbb{R}^3
a,b∈R3,通常意义下的内积可以写成:
a
⋅
b
=
a
T
b
=
∑
i
=
1
3
a
i
b
i
=
∣
a
∣
∣
b
∣
cos
⟨
a
,
b
⟩
\boldsymbol{a} \cdot \boldsymbol{b}=\boldsymbol{a}^T \boldsymbol{b}=\sum_{i=1}^3 a_i b_i=|\boldsymbol{a}||\boldsymbol{b}| \cos \langle\boldsymbol{a}, \boldsymbol{b}\rangle
a⋅b=aTb=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩
其中 cos ⟨ a , b ⟩ \cos \langle\boldsymbol{a}, \boldsymbol{b}\rangle cos⟨a,b⟩ 指向量 a , b \mathbf{a},\mathbf{b} a,b 的夹角。内积也可以描述向量间的投影关系。
外积
a
×
b
=
[
e
1
e
2
e
3
a
1
a
2
a
3
b
1
b
2
b
3
]
=
[
a
2
b
3
−
a
3
b
2
a
3
b
1
−
a
1
b
3
a
1
b
2
−
a
2
b
1
]
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
b
=
def
a
∧
b
.
\boldsymbol{a} \times \boldsymbol{b}=\left[e1e2e3a1a2a3b1b2b3
外积的结果是一个向量,它的方向垂直于这两个向量,大小为
∣
a
∣
∣
b
∣
sin
⟨
a
,
b
⟩
|\boldsymbol{a}||\boldsymbol{b}| \sin \langle\boldsymbol{a}, \boldsymbol{b}\rangle
∣a∣∣b∣sin⟨a,b⟩,是两个向量张成的四边形的有向面积。对于外积运算,我们引入了 ^
符号,把
a
\mathbf{a}
a 写成一个矩阵。事实上是一个反对称矩阵(Skew-symmetric Matrix)
,可以将 ^
记成一个反对称符号
。这样就把外积
a
×
b
a\times b
a×b 写成了矩阵与向量的乘法
a
∧
b
a^{\wedge} b
a∧b,把它变成了线性运算。这个符号在 SLAM 内经常会用到,请记住它。并且此符号是一个一一映射,意味着任何向量都对应着唯一的一个反对称矩阵,反之亦然:
a
∧
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
.
\boldsymbol{a}^{\wedge}=\left[0−a3a2a30−a1−a2a10
需要额外提醒的是,向量和加减法、内外积,即使在不谈论它们的坐标时也可以计算。例如,虽然内积在有坐标时,可以用两个向量的分量乘积之和表达,但是即使不知道它们的坐标,也可以通过长度和夹角来计算二者的内积。所以两个向量的内积结果和坐标系的选取是无关的。