距离磅计算器

给两个平面坐标点,立刻得到它们的直线距离:不只一个结果,还同时给出水平位移、垂直位移、中点以及以 x 轴正向为零度的方位角,方便画图、验算和核对。

第一个点的坐标
第二个点的坐标

计算公式:Math.sqrt(Math.pow(x₂−x₁, 2) + Math.pow(y₂−y₁, 2)),结果保留四位小数;上面是演示点 (0,0) → (3,4) 的结果,3² + 4² = 25,开方正好等于 5。

使用方法

距离磅计算器只收四个数字:两个点的横坐标与纵坐标。坐标系由你自己定义,页面不做任何单位假设。

  1. 先定坐标系:比如把房间左下角定为原点、单位取米,或把地图某个角定为原点、单位取像素。四个输入框都按同一套单位填。
  2. 「第一个点的坐标」填演示的 x₁ = 0、y₁ = 0;「第二个点的坐标」填 x₂ = 3、y₂ = 4。
  3. 点「计算两点距离」,或在任一输入框按 Enter。四张卡片同时更新:距离、Δx 与 Δy、中点、方位角。
  4. 核对用米制/英制混了的场合,先用单位换算页把两组坐标统一,再回来填。
  5. 下方对照表默认 12 行,「加载更多」补到 20 行;可导出 CSV(带 BOM)或复制 TSV。
  6. 改乱了点「载入示例」恢复 (0,0) → (3,4)。

距离磅计算器能解决什么

它适合一切「在平面上两个位置之间拉一条直线,问这条线有多长」的场景:

  • 平面图放线与核对:施工图上两个点算出 5.0000 米之后,卷尺量出来差超过容许偏差,就能立刻发现坐标抄错或者轴线偏移。
  • 屏幕布局与图形碰撞:把元素左上角当第一个点、另一个元素左上角当第二个点,距离小于设定边距就会重叠——对照表第 19 行 (100,100) → (103,104) 与第 1 行 (0,0) → (3,4) 的距离都是 5.0000,说明结果只跟差值有关、跟位置无关。
  • 巡检机器人路径:给定相邻两个巡检点,用中点可以直接取到两点的中间位置作为续检点,方位角告诉你下一步往哪边走。
  • 教学验算:用 3-4-5、5-12-13、8-15-17 这些勾股数组可以快速验算:只要差值相同,绝对值不同的两组点必然得到同一个距离。

本页不做的事:不做地球表面的球面距离。经纬度是角度单位,不能当平面坐标直接代入,否则得到的是「度」这种既非长度也非角度的混杂物——想算地球上两地的实际距离请用大圆距离(Haversine)公式的工具。本页也不处理三维点(没有 z),不做多点路径的累加。

原理和变量

① 具体函数:距离用 Math.sqrt(Math.pow(x₂ − x₁, 2) + Math.pow(y₂ − y₁, 2)),方位角用 Math.atan2(y₂ − y₁, x₂ − x₁) * 180 / Math.PI,中点是两分量分别求算术平均。

② 关键参数为什么这样取:用 atan2 而不是 atan(dy/dx),因为后者在 dx = 0 时是除零,而且只能返回 (−90°, 90°),无法区分「向左走」和「向右走」——对照表第 11 行 (0,0) → (0,7) 就是 dx = 0 的情形,atan2 给出干净的 90.00°。距离用 Math.pow(v, 2) 求平方,在 IEEE 754 双精度下与 v * v 逐位相同,但语义更明确。

③ 遵循哪个定义:这是欧几里得距离(RSS,平方和开方),建立在平面直角坐标系之上;方位角以 x 轴正向为 0°、逆时针为正值,与罗盘方位角(正北为 0°、顺时针为正)是两种不同的约定,两者换算关系是「罗盘角 = 90° − 本页角」,演示值 53.13° 对应罗盘角 36.87°。浮点遵循 IEEE 754。

④ 输入怎么变成输出:dx = x₂ − x₁、dy = y₂ − y₁ 得位移;dx² + dy² 得平方和;开方得距离 5;atan2(dy, dx) 得弧度再乘 180/π 得度;((x₁+x₂)/2, (y₁+y₂)/2) 得中点 (1.5, 2)。位移本身也能直接讀:演示值下 Δx = 3、Δy = 4。

⑤ 边界与阈值:坐标允许 −1000000~1000000,平方和最大 4×10¹²,远低于双精度上界 1.7976×10³⁰⁸,所以区间内不会溢出。真正会溢出的是更极端的情况:Math.pow(1e200, 2) 已经是 Infinity,而同样两个数用 Math.hypot(1e200, 1e200) 仍能给出 1.4142×10²⁰⁰;反方向同样致命,Math.pow(1e-200, 2) 下溢为 0。双精度有效位约 15~17 位,安全整数上限 9007199254740991(2⁵³ − 1)。

⑥ 常见误用的正确解释:把经纬度当平面坐标是最典型的错误。北京天安门 (39.9042, 116.4074) 到上海人民广场 (31.2304, 121.4737),直接代入勾股得到 10.0450——这个数没有单位。正确做法有两种:用 Haversine 公式算大圆距离得 1067.3 公里;或者先把角度折算成公里再套勾股,若经度方向不乘 cos(纬度) 会得到 1117.3 公里、误差 50.0 公里,乘了 cos(中纬度) 得 1068.0 公里、与大圆距离只差 0.7 公里。

完整示例(数值仅作演示)

保持演示值:第一个点 (0, 0),第二个点 (3, 4)。

  • 水平位移 Δx = 3 − 0 = 3,垂直位移 Δy = 4 − 0 = 4。
  • 平方和 = 3² + 4² = 25,距离 = √25 = 5.0000。
  • 中点 = ((0 + 3) ÷ 2, (0 + 4) ÷ 2) = (1.5, 2)。
  • 方位角 = atan2(4, 3) × 180 ÷ π = 53.13°;对应罗盘方位角 90° − 53.13° = 36.87°。
  • 平移不变性:把两点整体平移到 (100,100) 与 (103,104),所有差值不变,距离仍是 5.0000、方位角仍是 53.13°,只有中点变成 (101.5, 102)。

这几项与页面默认卡片、对照表第 1 行和第 19 行完全一致。

输入范围与对照表

距离磅计算器的对照表前 12 行默认可见,「加载更多」补齐后 8 行。方位角负号表示顺时针方向的一侧;距离一律四位小数。

常见坐标组合的距离、方位角与中点(第 1、9、14、19 行的差值相同,可用来验证平移不变性)
序号起点 (x₁, y₁)终点 (x₂, y₂)ΔxΔy距离方位角(°)中点
1(0, 0)(3, 4)345.000053.13(1.5, 2)
2(0, 0)(6, 8)6810.000053.13(3, 4)
3(0, 0)(5, 12)51213.000067.38(2.5, 6)
4(0, 0)(8, 15)81517.000061.93(4, 7.5)
5(0, 0)(7, 24)72425.000073.74(3.5, 12)
6(0, 0)(9, 12)91215.000053.13(4.5, 6)
7(0, 0)(1, 1)111.414245.00(0.5, 0.5)
8(0, 0)(10, 10)101014.142145.00(5, 5)
9(1, 2)(4, 6)345.000053.13(2.5, 4)
10(-2, 3)(4, -5)6-810.0000-53.13(1, -1)
11(0, 0)(0, 7)077.000090.00(0, 3.5)
12(5, 5)(-5, -5)-10-1014.1421-135.00(0, 0)

第 11 行 Δx = 0,第 12 行两点分居两侧——这两行专门演示 atan2 能在除零与反向两种情形下都给出正确的象限。

结果边界和舍入

舍入位置:距离磅计算器把距离保留四位小数(Number(d.toFixed(4))),方位角保留两位小数。演示值 5 会被格式化成 5.0000,这是有意的:四位小数能显出 (0,0) → (1,1) 得到 1.4142 而非 1.41421356 这类截断的区别。

什么时候会拒绝:四个输入框任意一个为空、包含非数字字符,或者绝对值超过 1000000。坐标为负是完全合法的——第 10、12、15 行都是负数坐标,负号参与的是差值运算,不是错误。

两个点重合呢:Δx 与 Δy 都是 0,距离得 0.0000,方位角按 atan2(0,0) = 0° 给出。这不是报错,而是两点之间没有位移的正确回答。

为什么单位不写在结果里:页面不知道你用的是米、像素还是英尺,所以结果只给数值;把结果抄到图纸上时请自己带上单位。混用单位是最容易发生的错误: Δx 用米、Δy 用厘米,算出来会小两个数量级。

精度:输入区间内所有结果的有效数字由双精度决定,约 15~17 位;四位小数的输出不会成为误差来源,真正需要小心的是坐标本身的有效位。

常见问题

方位角为什么和手机指北的数值不一样?

两者零点与方向都不同。本页以 x 轴正向为 0°、逆时针为正;罗盘方位角以正北为 0°、顺时针为正。演示值 53.13° 换算成罗盘角是 90° − 53.13° = 36.87°。若你的 y 轴正方向本就设为北,还要额外做一次方向反转。

负数坐标能用吗?

能。负数是坐标值而不是错误信息:(-2, 3) 到 (4, -5) 的 Δx = 6、Δy = −8,距离 10.0000、方位角 −53.13°。只有空值、非数字和超过 ±1000000 会被拦下。

能不能直接填经纬度?

不建议。北京天安门到上海人民广场直接代入勾股得 10.0450,这个数没有物理单位;改用 Haversine 公式得 1067.3 公里。经纬度要先用球面公式,或按 cos(纬度) 折算差后再套勾股(得 1068.0 公里)。

为什么不多给几位小数?

四位小数已经远超常规输入的有效位。双精度有效数字只有约 15~17 位,多点运算后再多显示几位,只等于把浮点尾 noise 显示出来。

有三维版吗?

本页只处理平面两维,没有 z 轴输入。需要三維距离时请把两个投影分别计算,或改用支持三维坐标的工具。

两个网点重合时结果是 0,对吗?

对。Δx = Δy = 0 时平方和为 0,开方得 0.0000,方位角按 atan2(0,0) = 0° 输出。这表示两点之间没有位移,也可以用来验证你有没有把同一个点填进两栏。

导出 CSV 中文乱码怎么办?

本页导出的 CSV 带 UTF-8 BOM(\ufeff),Excel 打开会按 UTF-8 识别。如果仍出现乱码,通常是表格软件把它识别成了本地编码,可在导入向导里手动指定 UTF-8。

输入的内容会被上传吗?

不会。全部计算在浏览器里完成,刷新即消失;可以在浏览器 Network 面板自查,点「计算两点距离」时不会发出任何请求。

相关工具