本文最后更新于 2025年6月9日 晚上
【数学】向量
运算法则
点乘
输入两个向量,输出一个标量。又称作标量积,内积。
点乘很类似与标量的乘法,且满足对应的运算法则,包括因式分解之类的公式都可以套用,甚至可以考虑省略点乘的符号,就像乘法那样(不过这不是标准做法)。
定义
- 几何定义:a⋅b=∣a∣∣b∣cos(θ)
- 代数定义:a⋅b=∑i=1naibi=a1b1+a2b2+⋯+anbn
意义
- dot(a,b) > 0 :a 和 b 同向,即夹角为 0-90。
- dot(a,b) = 0 :a 和 b 相互垂直。
- dot(a,b) < 0 :a 和 b 反向,即夹角为 90-180。
性质
- 满足交换律:a⋅b=b⋅a
- 满足加法分配律:a⋅(b+c)=a⋅b+a⋅c
- 乘以标量时满足:(c1a)⋅(c2b)=(c1c2)(a⋅b)
变形
-
v⋅v=∣v∣2
v⋅v=vx2+vy2+vz2=vx2+vy2+vz22=∣v∣2
叉乘
输入两个向量,输出一个向量。又称作外积,向量积。
定义
-
几何定义:
a×b=∣a∣∣b∣sin(θ)n
其中θ是a,b的夹角,n是与a,b所构成的平面垂直的单位向量。
-
代数定义:
a×b=xaxbxyaybyzazbz=x(−1)1+1aybyazbz+y(−1)1+2axbxazbz+z(−1)1+3axbxayby=x(aybz−azby)−y(axbz−azbx)+z(axby−aybx)
其中x,y,z分别为三维空间的三个基向量
意义
- 计算与 a 和 b 相垂直向量 c。
- c 的模长等于以 a,b 为临边的四边形面积。
- 伸出手,掌心对准 a 和 b 的夹角,手掌应能通过弯曲模拟 a 旋转到 b 的状态,此时大拇指为旋转轴,同时也便是叉乘出的新向量 c。
性质
- 反交换律:a×b=−b×a
- 乘以标量时满足:(ra)×b=a×(rb)=r(a×b)
相关函数
夹角
给定任意两个向量 a 和 b 求其夹角:
angle(a,b)=arccos(∣a∣∣b∣∣a∣∣b∣cos(θ))=arccos(∣a∣∣b∣dot(a,b))
投影
若 v 是待投影的向量,n 是投影到的法线,则:
project(v,n)=∣n∣n∗∣v∣cos(θ)=∣n∣n∗∣n∣dot(v,n)
特别当 n 为单位向量时:
project(v,n)=n∗dot(v,n)
旋转
给定向量 v 以 n 为旋转轴转 θ 度,求旋转后新向量:
v∥v⊥rotate(v,n,θ)=project(v,n)=v−v∥=v⊥cos(θ)+cross(n,v⊥)sin(θ)+v∥
基本原理是将 v 拆解成两个向量旋转的复合:一个平行旋转轴故无需旋转;一个与旋转轴垂直,可借助叉乘构建二维旋转坐标系,利用三角函数轻松求出旋转后的向量;
反射
给定向量 v 以 n 为反射法线,则反射后的新向量为:
reflect(v,n)=v−2∗dot(v,n)∗n
可以简单想象成将入射向量的反向量投影在法线上并乘二,再加上入射向量得到的就是出射向量了。
推导过程

以上图为例即求出 OB 的值,AO 和 OP的方向(后续简称 n ) 分别为入射角和法线。
OB=AB−AO=2AP−AO=2(AO+OP)−AO=AO+2OP=AO+2∗project(OA,n)=AO+2∗dot(−AO,n)∗n=v−2∗dot(v,n)∗n
插值
lerp(a,b,t)=a+(b−a)t