跳到主要内容
CalcMax

点积计算器

结果

8.0000

点积

向量 u 的模
3.0000
向量 v 的模
3.0000
两向量夹角
27.2660 °

点积计算器给两个向量,返回它们的点积(也叫内积)、各自的长度,以及两者之间的夹角。把每个向量的分量用空格或者逗号隔开打进去——三维就写 1 2 2,二维就写 0 3——剩下的交给页面。向量就是一串数,代表既有大小又有方向的东西:从东北吹来的每小时 30 公里的风、往斜下方推的力、镜头对准的方向。两个向量的点积是这么算的:第一个分量相乘、第二个分量相乘、第三个分量相乘,把所有乘积加起来。这一个数恰好说明了两个向量在方向上彼此有多一致,所以它从游戏里的光照计算一直用到物理学里功的定义。两者同向时它最大,成直角时为零,反向时为负。页面把它换算成夹角,依据是点积等于两个长度相乘、再乘夹角余弦。反过来写就是:余弦等于点积除以两个长度之积,夹角是这个余弦的反余弦。有三个答案值得一眼认出。点积为零说明两向量垂直,因为 90 度的余弦是零,而这是这一页最有用的一件事——不必量任何东西就能判断两个方向是不是成直角。两个向量相同得到 0 度,因为它们同向;互为相反数得到 180 度。有一个输入是被拒绝而不是被回答的:零向量,它根本没有方向。它与任何东西的点积都是零,而要用它的长度去求夹角就等于除以零,所以页面把整道计算都退回去,而不是给出一个中间有个洞的部分答案。除此之外什么都可以:只要两个向量分量个数相同,多长都行,负分量也行,那正是一个朝左或者朝下的向量的写法。

几组向量与它们算出来的结果

向量 u向量 v点积|u||v|夹角(°)
1 2 22 2 183327.266
3 4 04 3 0245516.2602
1 00 101190
1 1 11 1 131.73211.73210
1 2 34 5 6323.74178.77512.9332
-1 0 01 0 0-111180
2 -34 5-73.60566.4031107.6501
1 23 4112.2361510.3048

八组,第一行是页面打开时的默认输入。第三列是找那三个「一眼该认出」的答案的地方。第三行是最朴素的直角,一个向量沿一条轴,点积为零、夹角正好返回 90——这就是这一页最常被用来做的垂直判定,而它完全不需要夹角那一列所依赖的三角函数。第四行是同一个向量的两份拷贝,给出表上最大的点积和 0 度夹角;第六行是一个向量与它自己的相反数,给出这里唯一的负点积和 180 度。这三行合起来就是整个范围:同向、垂直、反向。第五行是长度都为平方根的那一组不整齐的向量,也是说明「夹角是用未舍入的模算的」那一行——把 3.7417 与 8.775 相乘、再用 32 去除,得到同一个 12.9332,但只是勉强得到。第七行带着负的和正负混合的分量,那正是朝左或者朝下的向量的写法,它的点积 −7 与夹角 107.6501 正是符号与夹角必须一致的那种情形:大于 90 度且为负,本该如此。第八行是一组二维向量,因为页面接受任意多个分量。表中每个数都是页面构建时现算的,前两列里的点号是分隔符,不属于数字。

公式

u · v = u₁v₁ + u₂v₂ + … + uₙvₙ |u| = √(u₁² + u₂² + … ) cos θ = (u · v) ÷ (|u| × |v|)

向量 u
第一个向量,写成用空格或逗号隔开的分量:三维写 1 2 2,二维写 0 3,要多少写多少。之所以没有固定数量的框,是因为页面接受任意维数,而两个向量的分量个数必须相同
向量 v
第二个向量,写法相同、分量个数与第一个相同。顺序对点积和夹角都没有影响——把两个向量对调,答案一样
u · v
点积:把两个第一个分量相乘、两个第二个分量相乘,以此类推,再把结果加起来。它是一个没有单位跟着的普通数,因为向量的分量带的是那个量本身的单位,而两个分量相乘带的会是单位的平方
|u| 与 |v|
各自向量的模,单位就是分量本身的单位:各分量平方和的平方根。这是箭头通常意义上的长度,与「原点到向量所指那个点的距离」是同一道计算
θ
两个向量之间的夹角,单位是度,从同向的 0 度、经过垂直的 90 度、到反向的 180 度。它不会跑出这个范围,因为反余弦不可能返回范围之外的值
cos θ
点积除以两个模之积,它是这一页两半之间的桥。它从同向的 1,经过直角的 0,到反向的 −1,而夹角实际上就是从这个数算出来的
度
夹角输出的单位,也是这一页唯一带单位的输出。点积和两个模都是普通的数
四位小数
每个输出印出来的宽度。分量是整数时点积常常也是整数;两个模各带一个平方根、夹角带一个反余弦,所以后三个几乎从来不整齐

点积是问「两个方向有多一致」的标准办法,它能回答的问题比这套算术看起来要多得多。判断垂直是最主要的一个:点积为零则两向量成直角,程序靠它决定一个表面是不是朝着光源、一条路径是不是穿过一堵墙、图纸上两条线是不是互相垂直——而它只需要乘法,一点三角函数都不用。其次是符号:为正说明大体同向,为负说明大体反向,背面剔除和「这个力是在对物体做功还是阻碍它」背后的判据整个就是这一条。物理里同一个数叫功:一个力做的功等于力点乘位移,这就是斜着推不如正着推、而成直角推一点功也不做的原因。当你真的要夹角而不只是要关系时,页面把它给你,而值得认的数字是 0 度、90 度和 180 度——同向、垂直、反向。其余的角都是偏离这三者的一对向量,而一个有用的核对是:点积的符号应当与夹角一致,点积为负而夹角小于 90 度不可能同时成立。

算例

  1. 1 2 2 与 2 2 1

    1. 点积:1 × 2 + 2 × 2 + 2 × 1 = 2 + 4 + 2 = 8
    2. u 的模:√(1 + 4 + 4) = √9 = 3
    3. v 的模:√(4 + 4 + 1) = √9 = 3
    4. 余弦:8 ÷ (3 × 3) = 0.888889,它的反余弦是 27.2659…,保留三位是 27.266

    页面打开时的默认输入,也是整齐的一组:两个向量的长度都正好是 3,于是余弦就是点积除以九。两个不同的向量、一个点积、两个模、一个夹角——整页浓缩在一行里。夹角小于 90 度而点积为正,这正是每个答案都该做一次的符号核对。

  2. 3 4 0 与 4 3 0

    1. 点积:3 × 4 + 4 × 3 + 0 × 0 = 12 + 12 = 24
    2. 两个模都是:√(9 + 16) = 5,因为第三个分量是零
    3. 余弦:24 ÷ (5 × 5) = 0.96,它的反余弦是 16.2602…

    两个躺在一个平面里的向量,第三个分量明写一个零,用意是说明二维向量不过是第三分量为零的三维向量。两个模都正好是 5,又是 3-4-5 在干它的老本行。夹角很小而点积很大且为正,这正是两个大体同向的向量该有的样子。

  3. 1 0 与 0 1

    1. 点积:1 × 0 + 0 × 1 = 0
    2. 两个模都是 1
    3. 余弦:0 ÷ 1 = 0,而零的反余弦正好是 90 度

    这一页最常被用来得到的答案。点积为零说明两个向量垂直,而这两个是最朴素的例子:一个沿 x 轴、一个沿 y 轴。注意夹角返回的是正好 90 而不是一个舍入过的数,因为余弦正好是零,走到这里不需要任何平方根或除法。这就是直角判据,而它一点也不用夹角输出所依赖的那套三角函数。

  4. 1 2 3 与 4 5 6

    1. 点积:1 × 4 + 2 × 5 + 3 × 6 = 4 + 10 + 18 = 32
    2. u 的模:√(1 + 4 + 9) = √14 = 3.741657…,保留四位是 3.7417
    3. v 的模:√(16 + 25 + 36) = √77 = 8.774964…,保留四位是 8.775
    4. 余弦:32 ÷ (3.741657 × 8.774964) = 0.974631…,它的反余弦是 12.9331…,保留四位是 12.9332

    两个长度都不整齐的向量,也是想看舍入代价时该看的一行。两个模都是除不尽的平方根,所以余弦是用它们未舍入的值算的,而不是用屏幕上的 3.7417 和 8.775——这就是为什么拿印出来的两个数相乘去除 32 得到 0.9746、落回同一个夹角,但只是勉强落回。夹角很小是因为两个向量接近平行:4 5 6 大致就是 1 2 3 放大了一些。

  5. -1 0 0 与 1 0 0

    1. 点积:(−1) × 1 + 0 × 0 + 0 × 0 = −1
    2. 两个模都是 1
    3. 余弦:−1 ÷ 1 = −1,而 −1 的反余弦正好是 180 度

    范围的那一端。两个方向正好相反的向量,点积等于两长度之积的相反数,这里是 −1,于是余弦是 −1、夹角是 180 度。这一行说明了点积为什么会是负的、以及负值意味着什么:不是错误,也不是夹角变小的意思,而是两个箭头背对着指。

局限

两个向量的分量个数必须相同,不同的一对页面会拒绝,而不是给短的那个补零。零向量整条被拒:所有分量都是零的向量没有方向,它与任何东西的夹角都没有定义,页面把整道计算退回去,而不是给出一个会被读成「同向」的 0 度。分量按普通数字解析:逗号加空格是分量分隔,逗号后面不带空格时按小数点读(1,5 就是一点五),而千位分组会被直接拒收、不去猜——写 1500,不要写 1,500。每个向量最多接受 200 个分量,远超任何手写的用例,但比数据管道用的规模要小。四位小数是显示宽度而不是精度声明,夹角是用未舍入的模算的,所以把印出来的几个数相乘未必能还原出印出来的夹角。这一页只管点积和夹角:不给叉积、不给一个向量在另一个上的投影、不给单位向量,也不管分量是用什么量的,所以用米填分量算出来的点积拿到的是一个普通数而不是平方米。

常见问题

分量该怎么打进去?
用空格隔开,或者用逗号加一个空格:1 2 2 和 1, 2, 2 都可以。两个数字之间、后面不带空格的逗号会被读成小数点(1,5 就是一点五);而 1,500 这样的千位分组会被直接拒收、不去猜,所以写 1500。两个向量的分量个数必须相同,只要相同就没有个数上限——二维和三维是同一个页面。
点积到底告诉了我什么?
两个向量在方向上有多一致。它们平行且同向时最大,垂直时为零,反向时为负。它的值还与两个向量有多长有关,所以长向量上的大点积并不代表夹角小——除以两个长度(页面替你做了)才得到夹角的余弦。
怎么判断两个向量是不是垂直?
看点积是不是零。判据就这一条,而且只用乘法——没有平方根、没有三角函数,这也是代码里用它那种写法的原因。页面仍然会给你夹角,它会显示 90,但如果你只想要「垂不垂直」,点积本身就已经定了。
点积为什么可以是负的?
因为它既跟踪大小也跟踪方向。两个大体指向对方的向量给出正数;成直角时两边的贡献相消,乘积为零;大体背向时给出负数。点积为负总是与大于 90 度的夹角同时出现,两者不应该互相矛盾——矛盾就说明输入有问题。
为什么全零的向量会被拒绝?
因为零向量没有方向,它与任何东西的夹角都没有定义。它与任何向量的点积都是零、自身的模也是零,要算余弦就得除以零。一个返回 0 度的页面等于在说它和你的向量同向,而那是在对一个不存在的方向作断言。
答案的单位是什么?
夹角是度,另外三个输出完全没有单位。点积是分量乘积之和,所以如果分量是用米量的,它的单位是平方米,如果分量只是普通的数,它就只是一个数;页面宁可不写单位也不去猜,因为同一套算术既服务于一个方向,也服务于一个力,还服务于一组考试成绩。

参考资料

相关计算器