跳到主要内容

向量计算全攻略:点积、叉积、模长与夹角怎么算

向量运算到底在算什么?这篇讲清 2D 与 3D 向量的加减、点积、叉积、模长和夹角,配真实输入输出和几何意义,帮你在物理、图形学和游戏开发里少踩坑。

发布于 作者 李雷
#向量计算 #向量运算 #点积 #叉积 #线性代数

向量计算全攻略:点积、叉积、模长与夹角怎么算

向量是物理课的力、图形学的法线、游戏里精灵的移动方向背后的同一套数学。很多人卡在向量上,不是因为公式难,而是因为每个运算的结果类型和几何含义没分清楚。点积算出来是一个数,叉积算出来是一个向量,模长是长度,夹角是角度。这篇把这几样讲到能动手算,并配上真实的输入输出,你可以边读边在 向量计算器 里核对。

向量加减:对应分量各算各的

向量加法和减法是最直接的:把两个向量对应位置的分量分别相加或相减。比如 (1, 2) + (3, 4) = (4, 6),x 分量 1 加 3 得 4,y 分量 2 加 4 得 6,互不干扰。减法同理。

几何上,加法是把第二个向量的起点接到第一个向量的终点,首尾相连画出来的那条对角线就是和向量。在静力学里,两个力的合力就是这样得到的。需要注意的一点:加减要求两个向量维度相同,2D 和 3D 混在一起没有意义,工具会直接报错,而不是悄悄给短的那个补零。

点积:对应分量乘积之和,判直角最快

点积是向量里用得最频繁的运算,定义很干脆:把两个向量的对应分量相乘,再把这些乘积加起来,得到的是一个标量,不是向量。

拿 a = (1, 2, 3) 和 b = (4, 5, 6) 来算:1·4 + 2·5 + 3·6 = 4 + 10 + 18 = 32。

点积最实用的性质是,当它等于 0,两个向量互相垂直。这是判断直角最快的办法,比量角度省事得多。在游戏开发里判断敌人是否在角色正侧面、在物理里判断力是否做功,都用得上这个 0。

叉积:只在 3D 里给出垂直向量

叉积和点积容易搞混,但结果完全不同:叉积返回一个同时垂直于两个输入的向量。这样的方向在三维空间里只有一条,所以叉积是 3D 专属。比如 (1, 0, 0) 叉 (0, 1, 0) 得到 (0, 0, 1),正好指向 z 轴。

2D 没有第三根轴可指,所以二维情形只能给出一个带符号的标量,也就是结果向量的 z 分量。(1, 0) 叉 (0, 1) 这个标量是 1,符号告诉你旋转方向是顺还是逆。

叉积在图形学里最常见的用途是求面法线:拿三角形的两条边向量做叉积,得到垂直于这个面的方向,再归一化,光照计算就有了正确的法线。

模长与单位向量:把长度和方向拆开

模长就是向量的长度,公式是各分量平方和再开根号。(3, 4) 的模长是 √(3² + 4²) = √25 = 5,这其实就是勾股定理。三维同理,(1, 2, 2) 的模长是 √(1 + 4 + 4) = √9 = 3。

把每个分量都除以模长,就得到单位向量,它方向不变但长度正好是 1。(3, 4) 归一化后是 (0.6, 0.8)。单位向量的意义是把方向从大小里剥离出来,处理朝向、法线、光照时几乎离不开它。要注意零向量长度为 0,没有方向,无法归一化,这时候应该看到提示而不是一个出错的结果。

夹角:从余弦公式来

两个向量的夹角由余弦公式给出:cos θ = (a · b) / (|a| · |b|),先用点积除以两个模长的积,再对结果取反余弦,换算成度。垂直得 90 度,同向得 0 度,反向得 180 度。

这里有个实现上的细节:浮点运算可能让余弦值算出 1.0000001 这种越界的数,反余弦遇到它就会变成 NaN。靠谱的做法是把余弦钳在 −1 到 1 之间,角度才稳定。零向量没有方向,夹角无定义,这一点也要明确处理。

我自己在调一个 2D 移动系统时栽过跟头:精灵总是慢慢跑偏,查了半天,最后把移动向量丢进计算器读模长,发现它是 1.04 而不是 1,根本没归一化好。归一化重算一遍,问题立刻消失。向量算错往往不在公式,而在你以为它是单位向量、其实不是。

这些运算到底用在哪

物理里,力的合成用加法,做功用点积,力矩和角动量用叉积。图形学和游戏开发里,法线用叉积,朝向和光照用单位向量,投影用来把速度或力分解到某个方向。线性代数课里,点积、范数、夹角是绕不开的基本功。把一个向量投影到另一个向量上,得到的标量长度,正是"这个量有多少沿着那个方向"的精确答案。

如果你要算的不止向量,还有更大的矩阵运算,可以接着用 矩阵计算器 处理乘法、行列式和逆矩阵。向量是矩阵的一行或一列,两者本就是一套语言。

把每个运算的结果类型记牢,点积出数、叉积出向量、模长出长度、夹角出角度,向量这部分基本就不会再绕进去了。


Made by Toolora · Updated 2026-06-13