3D数学基础:向量运算

向量的定义

从几何上讲,向量就是有方向,有大小的有向线段。

向量的运算

负向量

要得到任意维向量的负向量,只需要简单的将向量每个分量都变负即可。数学表达式:
− [ a b . . . x ] = [ − a − b . . . − x ] \begin{gathered} -\begin{bmatrix}a\\b\\...\\x\end{bmatrix} = \begin{bmatrix}-a\\-b\\...\\-x\end{bmatrix} \end{gathered} ab...x=ab...x

向量大小

向量大小也常被称为向量的长度
也就是向量各分量的平方和的平方根。计算公式如下:
∥ v ∥ = ∑ i = 1 n v i 2 \lVert v \rVert = \sqrt{\sum_{i=1}^n v_{i}^2} v=i=1nvi2

向量与标量的乘法

标量与向量的乘法非常直接,将向量的每个分量都与标量相乘即可。标量与向量乘的顺序并不重要,但经常把标量写在左边,数学表达式为:
k [ a 1 a 2 . . . a n ] = [ a 1 a 2 . . a n ] k = [ k a 1 k a 2 . . . k a n ] \begin{gathered} k\begin{bmatrix}a_{1}\\a_{2}\\...\\a_{n}\end{bmatrix}= \begin{bmatrix}a_{1}\\a_{2}\\..\\a_{n}\end{bmatrix}k= \begin{bmatrix}ka_{1}\\ka_{2}\\...\\ka_{n}\end{bmatrix} \end{gathered} ka1a2...an=a1a2..ank=ka1ka2...kan

标准化向量

对任意非零向量 v v v,都能计算出一个和 v v v方向相同的单位向量 v n o r m v_{norm} vnorm。这个过程就称为向量的标准化,要标准化向量,将向量除以它的模(大小)即可。
v n o r m = v ∥ v ∥ , v ≠ 0 v_{norm}=\frac {v} {\lVert v \rVert} ,v\not =0 vnorm=vvv=0
零向量不能被标准化。数学上是不允许的,因为将导致除零。几何上也没有意义,因为零向量没有方向。

向量的加法和减法

如果两个向量的维度相同,那么它们能相加,或相减。结果向量的维度与原向量相同。
向量加法的运算法则很简单,两个向量相加,将对应分量相加即可。
[ a 1 a 2 . . . a n ] + [ b 1 b 2 . . . b n ] = [ a 1 + b 1 a 2 + b 2 . . . a n + b n ] \begin{gathered} \begin{bmatrix}a_1\\a_2\\...\\a_n\end{bmatrix}+ \begin{bmatrix}b_1\\b_2\\...\\b_n\end{bmatrix}= \begin{bmatrix}a_1+b_1\\a_2+b_2\\...\\a_n+b_n\end{bmatrix} \end{gathered} a1a2...an+b1b2...bn=a1+b1a2+b2...an+bn
减法解释为加负向量: a − b = a + ( − b ) a-b=a+(-b) ab=a+(b)

一个点到另一个点的向量(减法的应用)

计算一个点到另一个点的位移是一种非常普遍的需求,可以使用向量减法来解决这个问题。
图1展示了怎样用 b − a b-a ba计算 a a a b b b的位移向量。
图1

距离公式

该公式用来计算两点之间的距离。
首先定义距离为两点之间线段的长度。因为向量是有向线段,所以从几何意义上说,两点之间的距离等于从一个点到另一个点的向量的长度。
先计算从a到b的向量d,在3D的情况下:
d = b − a = [ b x − a x b y − a y b z − a z ] \begin{gathered} d=b-a=\begin{bmatrix}b_x-a_x\\b_y-a_y\\b_z-a_z\end{bmatrix} \end{gathered} d=ba=bxaxbyaybzaz
a到b的距离等于向量d的长度:
距 离 ( a , b ) = ∥ d ∥ = ( b x − a x ) 2 + ( b y − a y ) 2 + ( b z − a z ) 2 距离(a,b)=\lVert d \rVert = \sqrt{(b_x-a_x)^2+(b_y-a_y)^2+(b_z-a_z)^2} (a,b)=d=(bxax)2+(byay)2+(bzaz)2
这样就推导出了3D距离公式,2D距离公式也很好推导出来:
距 离 ( a , b ) = ∥ b − a ∥ = ( b x − a x ) 2 + ( b y − a y ) 2 距离(a,b)=\lVert b-a \rVert = \sqrt{(b_x-a_x)^2+(b_y-a_y)^2} (a,b)=ba=(bxax)2+(byay)2

向量点乘

向量点乘就是对应分量乘积的和,其结果是个分量。向量点乘不能省略点乘号。
[ a 1 a 2 . . . a n ] ⋅ [ b 1 b 2 . . . b n ] = a 1 b 1 + a 2 b 2 + . . . + a n b n \begin{gathered} \begin{bmatrix}a_1\\a_2\\...\\a_n\end{bmatrix}\cdot \begin{bmatrix}b_1\\b_2\\...\\b_n\end{bmatrix}=a_1b_1+a_2b_2+...+a_nb_n \end{gathered} a1a2...anb1b2...bn=a1b1+a2b2+...+anbn
用连加符号简写:
a ⋅ b = ∑ i = 1 n a i b i a\cdot b=\sum_{i=1}^n a_ib_i ab=i=1naibi

一般来说,点乘结果描述了两个向量的“相似”程度,点乘结果越大,两向量越相近。
点乘等于向量大小与向量夹角的cos值的积:
a ⋅ b = ∥ a ∥ ∥ b ∥ cos ⁡ θ a\cdot b=\lVert a \rVert \lVert b \rVert \cos\theta ab=abcosθ
解得:
θ = arccos ⁡ ( a ⋅ b ∥ a ∥ ∥ b ∥ ) \theta = \arccos(\frac {a\cdot b} {\lVert a \rVert \lVert b \rVert}) θ=arccos(abab)
如果a、b是单位向量,就可以避免上面公式的除法运算:
θ = arccos ⁡ ( a ⋅ b ) \theta = \arccos(a\cdot b) θ=arccos(ab)
如果不需要 θ \theta θ的确切值而只需要a和b的夹角类型,可以只取用点乘结果的符号。

  • 如果 a ⋅ b a\cdot b ab大于0,则 0 ° ⩽ θ < 90 ° 0\degree\leqslant\theta<90\degree 0°θ<90°
  • 如果 a ⋅ b a\cdot b ab等于0,则 θ = 90 ° \theta = 90\degree θ=90°
  • 如果 a ⋅ b a\cdot b ab小于0,则 90 ° < θ ⩽ 180 ° 90\degree<\theta\leqslant180\degree 90°<θ180°

注意:如果a、b任意一个向量为零,那么 a ⋅ b a\cdot b ab的结果也为零。因此点乘对零向量的解释是,零向量对任意其他向量都垂直。(当然,前面定义零向量平行于或垂直于任意向量那是不对的,因为零向量没有方向。)

向量的投影

给定两个向量v和n,能将v分解成两个分量: v ⊥ v_{\perp} v v ∥ v_{\parallel} v。它们分别垂直和平行于n,并且满足 v = v ⊥ + v ∥ v=v_{\perp}+v_{\parallel} v=v+v一般称平行分量 v ∥ v_\parallel v为v在n上的投影
我们使用点乘计算投影:
在这里插入图片描述
下面我们先求 v ∥ v_\parallel v。观察到 v ∥ v_\parallel v平行于n,它可以表示为: v ∥ = n ∥ v ∥ ∥ ∥ n ∥ v_\parallel=n\frac {\lVert v_\parallel \rVert} {\lVert n \rVert} v=nnv
因此只要求出 v ∥ v_\parallel v的模就能计算出该投影向量的值了。很幸运,三角分解能帮助我们求出该值: cos ⁡ θ = ∥ v ∥ ∥ ∥ v ∥ \cos\theta=\frac{\lVert v_\parallel \rVert}{\lVert v \rVert} cosθ=vv
cos ⁡ θ ∥ v ∥ = ∥ v ∥ ∥ \cos\theta\lVert v \rVert=\lVert v_\parallel \rVert cosθv=v
将其代入之前的公式:
v ∥ = n cos ⁡ θ ∥ v ∥ ∥ n ∥ = n cos ⁡ θ ∥ v ∥ ∥ n ∥ ∥ n ∥ 2 = n v ⋅ n ∥ n ∥ 2 \begin{gathered} v_\parallel=n\frac {\cos\theta\lVert v \rVert} {\lVert n \rVert} \\=n\frac {\cos\theta\lVert v \rVert\lVert n \rVert} {\lVert n \rVert^2} \\=n\frac{v\cdot n}{\lVert n \rVert^2} \end{gathered} v=nncosθv=nn2cosθvn=nn2vn
当然,如果是n单位向量,那除法就没必要了
知道了 v ∥ v_\parallel v,求 v ⊥ v_\perp v就很容易了,如下:
v ⊥ + v ∥ = v v ⊥ = v − v ∥ = v − n v ⋅ n ∥ n ∥ 2 v_\perp+v_\parallel = v \\v_\perp=v-v_\parallel \\=v-n\frac{v\cdot n}{\lVert n \rVert^2} v+v=vv=vv=vnn2vn

向量的叉乘

另一种向量乘法称作叉乘或叉积,尽可应用于3D向量
术语叉乘来自记法 a × b a\times b 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=y1z2z1y2z1x2x1z2x1y2y1x2
当点乘和叉乘放在一起时,叉乘优先计算,因为点乘返回一个标量,同时标量和向量之间不能叉乘。
向量叉乘不满足交换律,满足反交换律:
a × b = − ( b × a ) a\times b=-(b\times a) a×b=(b×a)
叉乘也不满足结合律。

几何解释

叉乘得到的向量垂直于原来的两个向量。
在这里插入图片描述
图中,向量a和b在一个平面中。向量 a × b a\times b a×b指向该平面的正上方,垂直于a和b。
a × b a\times b a×b的长度等于向量的大小与向量夹角sin值的积,如下:
∥ a × b ∥ = ∥ a ∥ ∥ b ∥ sin ⁡ θ \lVert a\times b\rVert=\lVert a\rVert\lVert b\rVert\sin\theta a×b=absinθ
可以看到, ∥ a × b ∥ \lVert a\times b\rVert a×b也等于以a和b为两边的平行四边形的面积。
在这里插入图片描述
如果a、b平行或任意一个为0,则 a × b = 0 a\times b=0 a×b=0叉乘对零向量的解释为:它平行于任意其他向量。(当然,前面定义零向量平行于或垂直于任意向量那是不对的,因为零向量没有方向。)

已经证明了 a × b a\times b a×b垂直于a、b。但是垂直于a、b有两个方向。那 a × b a\times b a×b指向哪个方向呢?通过将a的头和b的尾相接,并检查从a到b是顺时针还是逆时针,能够确定 a × b a\times b a×b的方向。

  • 左手坐标系:
    如果a和b呈顺时针,则 a × b a\times b a×b指向您。
    如果a和b呈逆时针,则 a × b a\times b a×b远离您。

  • 右手坐标系:
    如果a和b呈顺时针,则 a × b a\times b a×b远离您。
    如果a和b呈逆时针,则 a × b a\times b a×b指向您。在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值