# 两点距离图解：负坐标，为什么仍然用相减？

在等尺度坐标平面中改变两点，用水平与竖直辅助线区分有向变化和非负长度；通过交换、平移与退化例子推导两点距离公式。

原文 / Canonical: https://crazycloud.cc/learn/coordinate-distance
作者: crazycloudcc
首次发布: 2026-10-14
更新: 2026-10-19

本阅读版与网页共用课程数据；互动请访问原文。

## 一句话答案

在平面直角坐标系中，A=(x₁,y₁)、B=(x₂,y₂)的距离为d=√((x₂−x₁)²+(y₂−y₁)²)。坐标差可以为负，辅助线段长度分别为|x₂−x₁|和|y₂−y₁|；平方消去符号，距离取非负平方根。

## 适用条件与边界

两轴互相垂直，使用相同长度单位；图形两轴采用相同比例尺。公式适用于任意实数平面坐标，实验滑块仅提供−5到5的整数。它计算欧氏直线距离，不是道路绕行长度，也不能把经纬度的度数直接代入当作地面距离。两点可重合，此时距离为0。

## 不变量

同时平移两点同一向量，两个坐标差不变；交换两点，差同时变号而平方不变。每次画面更新使用同一组坐标计算图形、公式和代码。

## 逐步例子

1. 设A=(−2,1)、B=(1,−3)，选辅助点C=(x₂,y₁)=(1,1)。AC水平、CB竖直；它们是辅助线，不是额外的坐标轴。
2. 从A到C，Δx=1−(−2)=3，向右3单位。从C到B，Δy=−3−1=−4，向下4单位。辅助线段长度是|Δx|=3、|Δy|=4。
3. 当两条辅助线段都非零，它们形成直角三角形。勾股定理给出d²=|Δx|²+|Δy|²；由于|t|²=t²，得到d=√(Δx²+Δy²)。本例d=√(9+16)=5。
4. 交换A、B，两个坐标差都变号，平方与距离不变。同时把两点平移(1,1)，得到A=(−1,2)、B=(2,−2)，差仍为3和−4，距离仍为5。
5. 同一水平线上的A=(−5,1)、B=(−2,1)，距离为|−2−(−5)|=3，不是5+2。跨轴也无需换公式，例如A=(−2,−2)、B=(2,2)，距离为√32=4√2。
6. 若横坐标相同或纵坐标相同，辅助图退化，直接取另一坐标差的绝对值。若两点重合，两个差都为0，距离为0；这时不再称为非退化直角三角形。

## 单位、精度与计算边界

固定二维坐标只需两次相减和一次长度计算，在固定精度运算模型下时间与额外空间为O(1)。代码用Math.hypot(dx,dy)，但必须先确保输入、差值和结果在可表示范围内；它不能修复已经溢出的相减。实验整数范围保证平方和0到200精确，根式给出精确距离，小数显示为近似。画面缩放只改变像素，不改变坐标单位或距离。

## 常见误区

- 把坐标当长度：坐标可能为负；有向变化量也可能为负，长度和距离则非负。两点重合的0不能说成正数。
- 一跨过坐标轴就相加：保留坐标原有正负号后做差。不同侧时绝对值有时等于到原点距离之和，同侧时一般不是。
- 把横向长度与竖向长度相加当作直线距离：本例折线为3+4=7，直线为5；两种路径不同。
- 把平方根写成±d：方程z²=25有两个解，但长度只能取非负值5。
- 只平移一点，或让两个点分别被边界截断：这不是共同平移，不能保证距离不变。实验将越界时禁用整个平移方向。

## 自测

A=(−3,2)、B=(1,−1)，距离是多少？把两点同时向右移1单位后呢？如果改为A=B=(−1,2)呢？

坐标差为4和−3，距离√(16+9)=5。共同右移后差不变，距离仍为5；两点重合时两个差都为0，距离为0。

## 距离的应用：点在圆内、圆上，还是圆外？

1. **只判断是否在半径范围内，必须开平方吗？** 不必。设中心 O=(h,k)、点 P=(x,y)，两轴垂直且使用相同长度单位，半径 r≥0。令 q=(x−h)²+(y−k)²，则距离 d=√q。因为 d 和 r 都非负，d≤r 当且仅当 q≤r²。r>0 时，q<r² 是严格圆内，q=r² 是圆周，q>r² 是圆外；包含边界的圆盘用≤，只问圆周则用=，不能混用。r=0 时，包含边界的范围只剩中心一个点，严格内部为空，不再称为普通的圆。负半径不在这个定义内，不能先平方把它伪装成合法输入。
2. **中心不在原点，或坐标为负，会改变判法吗？** 仍然先减中心坐标。取 O=(−2,1)、r=5：P=(−2,5) 的 q=0²+4²=16，在圆内；P=(1,−3) 的 q=3²+(−4)²=25，在圆周；P=(2,5) 的 q=4²+4²=32，在圆外。阈值一直是 r²=25，不能拿 q 与 r=5 比较，也不用先把距离四舍五入。将中心和点共同平移，两个差不变，分类也不变。上方图形与同步代码仍演示两点距离；这里是文字应用，没有新增半径控件或圆形交互。
3. **平方比较是否一定精确、一定不会溢出？** 不是。AtCoder ABC174 B（2020年旧题）是统计距原点不超过 D 的输入点，D允许为0，同坐标的多个输入点分别计数。其整数坐标绝对值至多200000，q至多80000000000，超过32位有符号整数范围；C++应在乘法前转为足够宽的整数，不能等溢出后再转。这个界限内 JavaScript Number 的整数平方与求和精确，但不能推广到任意大坐标或任意中心。更大整数可用 BigInt 等合适表示，并在相减前就选好类型；浮点或近似测量还需考虑相减、平方、求和误差，按实际精度约定边界规则，没有通用的固定 epsilon 能保证所有尺度都正确。平方比较只是省去开方，不能修复此前的溢出或舍入。

## 延伸学习

本课把水平与竖直坐标差变成直角边长，再应用勾股定理。若想理解平方和为什么成立，可先看四块全等三角形的面积拼补。

[前置：勾股定理的面积拼补](https://crazycloud.cc/learn/pythagorean-theorem)

## 参考资料

- [OpenStax《Algebra and Trigonometry 2e》2.1：直角坐标系与距离公式](https://openstax.org/books/algebra-and-trigonometry-2e/pages/2-1-the-rectangular-coordinate-systems-and-graphs)
- [OpenStax《Intermediate Algebra 2e》11.1：距离公式与圆方程](https://openstax.org/books/intermediate-algebra-2e/pages/11-1-distance-and-midpoint-formulas-circles)
- [AtCoder ABC174 B：Distance（2020-08-02，包含边界的距离判断）](https://atcoder.jp/contests/abc174/tasks/abc174_b)

[返回图解实验室](https://crazycloud.cc/learn)
