空间向量算个角,实际上就比画个图好办多了,但这事儿干起来,往往比人还慢。 大量人一看到这一堆公式就头疼,认定那是天书。
实际上啊,这玩意儿就是给空间里的两个方向标个尺子,然后看它们俩如何打架。想象一下,你在三维世界里递给两个人一张纸,上面画着箭头,一个是 $vec{a}$,一个是 $vec{b}$。你们想看看这两个箭头是指向同一个方向,还是背道而驰,要么是呈个九十度。
这时候,脑子里就得浮现出那个著名的公式:$cos theta = frac{vec{a} cdot vec{b}}{|vec{a}| |vec{b}|}$。
这东西说白了就是“点积除以模长”,但讲起来确实有点绕。 举个例子,咱们来算一下 $vec{a} = (1, 0, 0)$ 和 $vec{b} = (0, 1, 0)$ 俩不共线向量之间的夹角。
这俩向量就像是从原点出发,分别指东和西(要么叫南北),互成九十度。用公式一算,点积就是 $1 times 0 + 0 times 1 + 0 times 0 = 0$。模长分别是 1 和 1。分子是零,分母是 1。$cos theta = 0$,那 $theta$ 就是 90 度。
这就对了,互相垂直的角,余弦值为 0。 再换个场景,要是这两个向量都在 $xOz$ 平面上,一个指 $1$ 元,一个指 $2$ 元。
那 $vec{a} = (1, 0, 0)$, $vec{b} = (2, 0, 0)$。
这时候它们彻底重合,方向一样。点积就是 $1 times 2 = 2$。模长分别是 1 和 2。乘起来是 2。$cos theta = frac{2}{1 times 2} = 1$。
那 $theta$ 自然就是 0 度了。
这说明啥呢?说明这两个向量彻底同向,夹角最小。 要是反过来,一个指 $1$ 元,一个指 $-1$ 元。$vec{a} = (1, 0, 0)$, $vec{b} = (-1, 0, 0)$。点积是 $1 times (-1) + dots = -1$。模长还是 1 和 1。$cos theta = -1$,那 $theta$ 就是 180 度。
这表示它们互为反向,彻底反之。
这时候算出的是钝角就连平角,说明方向彻底对头。 要是你用的是计算器,这时候就得小心了。出于 $cos theta$ 是个周期函数,值有正有负,对应的角度在 $0$ 到 $360$ 之间有大量解。
比如 $cos theta = 0.5$,角度可能是 60 度,也可能是 300 度(要么说是 -60 度)。
这你就得根据向量的实际指向来确定正负,要么用反正弦函数结合象限来判断。有些时候,直接用反余弦 $arccos$ 出来的值可能大于 180 度,那还得把它补成 $360$ 减去那个值,要么用 $2pi$ 减去它,才能对应到几何意义上的那个角。 还有个好办让人晕的地方,就是模长 $sqrt{x^2 + y^2 + z^2}$ 这个玩意儿。别看公式里它是分母,用来除以的,但要是你把它当成字符串要么大数直接存进变量里,后面一算就认定这玩意儿忒大了要么忒小了,好办出错。
特别是三维空间里,要是坐标挺大,算出来的模长可能引发浮点数精度难题。
不过一般计算机处理的时候,要是是整数要么科学计数法,难题不大。 另外,这个公式的底层逻辑实际上就是向量的投影。$vec{a} cdot vec{b}$ 实际上就是 $vec{a}$ 在 $vec{b}$ 方向上的投影长度乘以 $vec{a}$ 的模长。最终除以 $vec{b}$ 的模长,剩下的就是夹角的余弦。
这在物理上特别有用,比如用力拉绳子,你用的力乘以绳子方向的单位向量,再除以力本身的大小,就能拿到绳子在受力方向上的有效分量。 实际上不用死磕那些复杂的推导过程,只要记住 $vec{a} cdot vec{b} = |vec{a}| |vec{b}| cos theta$ 这个等式,就能把大多数难题都解决。就像你玩解谜游戏,只要知道目标距离和当前朝向的关系,就能解出谜题。空间向量算角度,本质上就是量一量两个方向“吵”了多大架。 有时候看公式认定枯燥,认定全是数字堆砌,但一旦代入具体数值,比如 $vec{a} = (1, 2, 3)$ 和 $vec{b} = (4, 5, 6)$,大家就能直观地感受到这是在计算两个平面的夹角。
这时候用叉乘求法向量,再算法向量夹角的余弦,往往比用点积更直观一点。
不过点积确实更省事,出于它直接处理原向量,不用去算那些垂直的向量。 总而言之,空间向量算角度这事儿,没有绝对的对错,只有适用的场景。你是想做物理题,还是想做计算机图形学的作业?不同的任务可能用的方式略有不同,但核心都是那个余弦公式。
只要你不被公式吓倒,乖乖代入计算,大约 90% 的纳闷都能迎刃而解。
毕竟,数学会让人认定冷冰冰,但几何里的向量却是最有温度的东西,它们能描述你手心中任何一对力的方向,也能把三维空间里的点连成线。