3D数学基础:向量运算

本文详细介绍了向量的基础概念及各类运算,包括向量的加减法、标量乘法、标准化、点乘与叉乘等。并给出了这些运算的具体应用实例。

向量的定义

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

向量的运算

负向量

要得到任意维向量的负向量,只需要简单的将向量每个分量都变负即可。数学表达式:
−[ab...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=1nvi2\lVert v \rVert = \sqrt{\sum_{i=1}^n v_{i}^2}v=i=1nvi2

向量与标量的乘法

标量与向量的乘法非常直接,将向量的每个分量都与标量相乘即可。标量与向量乘的顺序并不重要,但经常把标量写在左边,数学表达式为:
k[a1a2...an]=[a1a2..an]k=[ka1ka2...kan]\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

标准化向量

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

向量的加法和减法

如果两个向量的维度相同,那么它们能相加,或相减。结果向量的维度与原向量相同。
向量加法的运算法则很简单,两个向量相加,将对应分量相加即可。
[a1a2...an]+[b1b2...bn]=[a1+b1a2+b2...an+bn] \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−ab-aba计算aaabbb的位移向量。
图1

距离公式

该公式用来计算两点之间的距离。
首先定义距离为两点之间线段的长度。因为向量是有向线段,所以从几何意义上说,两点之间的距离等于从一个点到另一个点的向量的长度。
先计算从a到b的向量d,在3D的情况下:
d=b−a=[bx−axby−aybz−az] \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∥=(bx−ax)2+(by−ay)2+(bz−az)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∥=(bx−ax)2+(by−ay)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

向量点乘

向量点乘就是对应分量乘积的和,其结果是个分量。向量点乘不能省略点乘号。
[a1a2...an]⋅[b1b2...bn]=a1b1+a2b2+...+anbn \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=1naibi 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⋅ba\cdot bab大于0,则0°⩽θ<90°0\degree\leqslant\theta<90\degree0°θ<90°
  • 如果a⋅ba\cdot bab等于0,则θ=90°\theta = 90\degreeθ=90°
  • 如果a⋅ba\cdot bab小于0,则90°<θ⩽180°90\degree<\theta\leqslant180\degree90°<θ180°

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

向量的投影

给定两个向量v和n,能将v分解成两个分量:v⊥v_{\perp}vv∥v_{\parallel}v。它们分别垂直和平行于n,并且满足v=v⊥+v∥v=v_{\perp}+v_{\parallel}v=v+v一般称平行分量v∥v_\parallelv为v在n上的投影
我们使用点乘计算投影:
在这里插入图片描述
下面我们先求v∥v_\parallelv。观察到v∥v_\parallelv平行于n,它可以表示为:v∥=n∥v∥∥∥n∥v_\parallel=n\frac {\lVert v_\parallel \rVert} {\lVert n \rVert}v=nnv
因此只要求出v∥v_\parallelv的模就能计算出该投影向量的值了。很幸运,三角分解能帮助我们求出该值: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 \rVertcosθv=v
将其代入之前的公式:
v∥=ncos⁡θ∥v∥∥n∥=ncos⁡θ∥v∥∥n∥∥n∥2=nv⋅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_\parallelv,求v⊥v_\perpv就很容易了,如下:
v⊥+v∥=vv⊥=v−v∥=v−nv⋅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×ba\times ba×b中的叉号。
叉乘的公式为:
[x1y1z1]×[x2y2z2]=[y1z2−z1y2z1x2−x1z2x1y2−y1x2] \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×ba\times ba×b指向该平面的正上方,垂直于a和b。
a×ba\times ba×b的长度等于向量的大小与向量夹角sin值的积,如下:
∥a×b∥=∥a∥∥b∥sin⁡θ\lVert a\times b\rVert=\lVert a\rVert\lVert b\rVert\sin\thetaa×b=absinθ
可以看到,∥a×b∥\lVert a\times b\rVerta×b也等于以a和b为两边的平行四边形的面积。
在这里插入图片描述
如果a、b平行或任意一个为0,则a×b=0a\times b=0a×b=0叉乘对零向量的解释为:它平行于任意其他向量。(当然,前面定义零向量平行于或垂直于任意向量那是不对的,因为零向量没有方向。)

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值