使用方法
距离磅计算器只收四个数字:两个点的横坐标与纵坐标。坐标系由你自己定义,页面不做任何单位假设。
- 先定坐标系:比如把房间左下角定为原点、单位取米,或把地图某个角定为原点、单位取像素。四个输入框都按同一套单位填。
- 「第一个点的坐标」填演示的 x₁ = 0、y₁ = 0;「第二个点的坐标」填 x₂ = 3、y₂ = 4。
- 点「计算两点距离」,或在任一输入框按 Enter。四张卡片同时更新:距离、Δx 与 Δy、中点、方位角。
- 核对用米制/英制混了的场合,先用单位换算页把两组坐标统一,再回来填。
- 下方对照表默认 12 行,「加载更多」补到 20 行;可导出 CSV(带 BOM)或复制 TSV。
- 改乱了点「载入示例」恢复 (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 行。方位角负号表示顺时针方向的一侧;距离一律四位小数。
| 序号 | 起点 (x₁, y₁) | 终点 (x₂, y₂) | Δx | Δy | 距离 | 方位角(°) | 中点 |
|---|---|---|---|---|---|---|---|
| 1 | (0, 0) | (3, 4) | 3 | 4 | 5.0000 | 53.13 | (1.5, 2) |
| 2 | (0, 0) | (6, 8) | 6 | 8 | 10.0000 | 53.13 | (3, 4) |
| 3 | (0, 0) | (5, 12) | 5 | 12 | 13.0000 | 67.38 | (2.5, 6) |
| 4 | (0, 0) | (8, 15) | 8 | 15 | 17.0000 | 61.93 | (4, 7.5) |
| 5 | (0, 0) | (7, 24) | 7 | 24 | 25.0000 | 73.74 | (3.5, 12) |
| 6 | (0, 0) | (9, 12) | 9 | 12 | 15.0000 | 53.13 | (4.5, 6) |
| 7 | (0, 0) | (1, 1) | 1 | 1 | 1.4142 | 45.00 | (0.5, 0.5) |
| 8 | (0, 0) | (10, 10) | 10 | 10 | 14.1421 | 45.00 | (5, 5) |
| 9 | (1, 2) | (4, 6) | 3 | 4 | 5.0000 | 53.13 | (2.5, 4) |
| 10 | (-2, 3) | (4, -5) | 6 | -8 | 10.0000 | -53.13 | (1, -1) |
| 11 | (0, 0) | (0, 7) | 0 | 7 | 7.0000 | 90.00 | (0, 3.5) |
| 12 | (5, 5) | (-5, -5) | -10 | -10 | 14.1421 | -135.00 | (0, 0) |
| 13 | (0, 0) | (20, 21) | 20 | 21 | 29.0000 | 46.40 | (10, 10.5) |
| 14 | (2, -1) | (5, 3) | 3 | 4 | 5.0000 | 53.13 | (3.5, 1) |
| 15 | (-1, -1) | (1, 1) | 2 | 2 | 2.8284 | 45.00 | (0, 0) |
| 16 | (0, 0) | (12, 16) | 12 | 16 | 20.0000 | 53.13 | (6, 8) |
| 17 | (0, 0) | (15, 20) | 15 | 20 | 25.0000 | 53.13 | (7.5, 10) |
| 18 | (0, 0) | (28, 45) | 28 | 45 | 53.0000 | 58.11 | (14, 22.5) |
| 19 | (100, 100) | (103, 104) | 3 | 4 | 5.0000 | 53.13 | (101.5, 102) |
| 20 | (0, 0) | (0.5, 1.2) | 0.5 | 1.2 | 1.3000 | 67.38 | (0.25, 0.6) |
第 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 面板自查,点「计算两点距离」时不会发出任何请求。