平面几何
两点距离/直线方程/点到线距离
完整属性
公式速查
经典案例
概念速查
周长(Perimeter):图形所有边长之和;曲线图形(圆/椭圆)则指闭合曲线的弧长。
面积(Area):图形所占平面区域的大小,单位为长度的平方。
对角线(Diagonal):连接两个非相邻顶点的线段;矩形/正方形/菱形的对角线长可由勾股或菱形对角公式求出。
海伦公式:已知三角形三边 a、b、c,半周长 s = (a+b+c)/2,则面积 S = √(s(s−a)(s−b)(s−c)),对所有三角形通用。
外接圆 / 内切圆:外接圆经过所有顶点,半径 R = abc / (4S);内切圆与所有边相切,半径 r = S / s。
重心 / 形心:三角形三条中线的交点,到三顶点距离之和最小;坐标为三顶点坐标的平均值。
正多边形:所有边等长、所有内角相等的凸多边形;内角 = (n−2)·180°/n,中心角 = 360°/n。
扇形 / 弓形:扇形由两条半径和一段弧围成;弓形由一条弦和一段弧围成(扇形减去三角形)。
椭圆周长:无初等公式,常用拉马努金二阶近似式 C ≈ π[3(a+b) − √((3a+b)(a+3b))],相对误差 ≪ 0.0001%。
离心率 e:椭圆形状参数,e = c/a(c 为焦距半长),e=0 时为圆,e→1 时趋于扁平。
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
CAD 辅助校验
机械制图员在 AutoCAD 中绘制零件图时,需要频繁验证两孔中心距、直线边到基准面的垂直距离。本工具输入坐标点即可秒算两点距离与点到线距离,无需在绘图软件中手动拉尺寸线,减少因目测误差导致的图纸返工,尤其适合批量校验多个尺寸的工况。
无人机航线规划
植保无人机飞手在规划矩形地块的喷洒路径时,需计算地块边界直线方程,并确保航线与边界保持固定偏移(如 2 米安全距离)。本工具输入边界两点坐标生成直线方程,再输入偏移量算点到线距离,快速得到平行航线坐标,避免无人机撞杆或漏喷。
工地放样复核
施工员在工地上用全站仪测出三个控制点坐标后,需判断桩位是否落在设计轴线上。本工具输入桩位坐标与轴线两端点坐标,立即得到点到线距离——若距离 < 5mm 即合格,否则需调整。省去手算解析几何公式的耗时,现场直接出结果。
物流仓储布局
仓库规划师在货架布局中,需要确保叉车通道中心线到货架边缘的距离 ≥ 3.5 米(安全转弯半径)。本工具输入通道两端点坐标与货架角点坐标,计算点到线距离,快速验证所有货架是否在安全距离内,替代手动拉卷尺或 CAD 量距,提升布局调整效率。
游戏碰撞检测
独立游戏开发者实现 2D 射击游戏时,需检测子弹(点)是否命中敌人身体(线段)。本工具输入子弹坐标与敌人身体两端坐标,计算点到线距离——若距离 < 敌人半宽则判定命中。省去自己写向量叉积求距离的调试时间,直接复用计算结果。
地图标注校准
GIS 数据录入员在电子地图上标注 POI 点时,需判断某建筑物是否落在道路红线范围内。本工具输入建筑物角点坐标与道路中心线两端坐标,计算点到线距离,并与道路半宽比对——若距离 > 半宽则建筑越界,需重新定位。替代在 GIS 软件中手动拉辅助线,批量校验更快。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | GeoGebra (在线版) | 传统纸笔/公式计算 |
|---|---|---|---|
| 数据隐私 | 纯浏览器,零上传 | 需上传至 GeoGebra 服务器 | 完全离线,无数据流动 |
| 处理速度 | 1 秒内 | 1-3 秒(含页面加载) | 数分钟(取决于计算复杂度) |
| 离线可用 | 完全离线(浏览器打开后) | 需联网 | 完全离线 |
| 输入方式 | 直接输入坐标数值 | 图形界面拖拽点/输入坐标 | 手动抄写公式并代入数值 |
| 结果呈现 | 纯数值结果 | 数值 + 动态图形 | 纯数值结果 |
| 适用场景 | 快速验证单一计算 | 教学演示、几何探索 | 考试、无电子设备环境 |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例7 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| 点A(1,2),点B(4,6) | 距离: 5.00 | 典型场景:计算两点间直线距离 |
| 点A(0,0),点B(3,4) | 距离: 5.00 | 典型场景:原点与点(3,4)的勾股距离 |
| 点A(0,0),点B(0,0) | 距离: 0.00 | 边界 case:两点重合,距离为零 |
| 点A(1e6,1e6),点B(1e6+1,1e6+1) | 距离: 1.41 | 边界 case:大坐标值,验证浮点精度 |
| 点A(1,2),点B(1,5) | 距离: 3.00 | 典型场景:垂直直线上的两点 |
| 点A(1,2),点B(4,2) | 距离: 3.00 | 典型场景:水平直线上的两点 |
| 点A(0,0),点B(0,0.0001) | 距离: 0.0001 | 边界 case:极短距离,验证小数精度 |
常见错误对照8 个常踩的坑 · 错误 → 修复
1. 两点坐标顺序颠倒导致斜率符号错误
A(1,2), B(3,4) → 代入公式时 A 的 y 减 B 的 y,A 的 x 减 B 的 x 混用统一用 (y₂ - y₁) / (x₂ - x₁),如 (4-2)/(3-1)=1斜率公式要求分子分母的减数顺序一致;混用会导致符号相反,直线方向判断错误。
2. 点到直线距离公式中未将直线化为一般式
点 (1,2) 到直线 y=2x+3 的距离直接代入 y=2x+3先将直线化为一般式 2x - y + 3 = 0,再代入 |2·1 - 1·2 + 3| / √(2²+(-1)²) = 3/√5点到直线距离公式只适用于一般式 Ax+By+C=0;斜截式、点斜式必须先转换。
3. 分母为零时未处理垂直线/水平线
输入 A(1,2), B(1,5) 求斜率时直接计算 (5-2)/(1-1) 报错判断 x₁=x₂ 时直接输出「斜率不存在,直线为 x=1」垂直线斜率公式分母为零,数学上无定义;工具应提前检测并返回特殊结果而非崩溃。
4. 用浮点数比较判断三点共线时忽略精度误差
if (slopeAB === slopeAC) 判定共线改用 |slopeAB - slopeAC| < 1e-10 或面积法 |x₁(y₂-y₃)+x₂(y₃-y₁)+x₃(y₁-y₂)| < 1e-9浮点数运算有舍入误差(如 0.1+0.2≠0.3),直接相等判断会漏掉理论上共线但计算有微小偏差的情况。
5. 直线方程参数输入了无效的系数组合
输入 A=0, B=0, C=5 表示直线A 和 B 不能同时为 0;此时应提示「A 和 B 不能全为零,否则不是直线」一般式 Ax+By+C=0 要求 A、B 不同时为零;全零时方程退化为 C=0,无意义。
6. 计算中点坐标时用了端点坐标的和而非平均值
中点 = ((x₁+x₂), (y₁+y₂)) 得到 (4,6)中点 = ((x₁+x₂)/2, (y₁+y₂)/2) 得到 (2,3)中点坐标是两端坐标的算术平均,不是简单求和;初学者容易漏掉除以 2。
7. 混淆「点到直线距离」与「两点间距离」
求点 (1,2) 到直线 y=x 的距离时,计算点 (1,2) 到原点 (0,0) 的距离用公式 |1·1 - 1·2 + 0| / √(1²+(-1)²) = 1/√2点到直线距离是垂线段长度,不是到直线上任意一点的距离;常见错误是误用两点距离公式。
8. 输入坐标时混用不同坐标系单位
点 A 用米 (1,2),点 B 用厘米 (300,400) 直接计算统一单位后再输入,如都换算为米:A(1,2), B(3,4)工具默认所有坐标在同一单位下运算;混用单位会导致结果完全错误,且工具无法自动检测单位。
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
d = √[(x₂ - x₁)² + (y₂ - y₁)²]
变量说明
d— 两点间的直线距离x₁, y₁— 第一个点的坐标x₂, y₂— 第二个点的坐标
示例
计算 A(1, 2) 与 B(4, 6) 的距离:d = √[(4-1)² + (6-2)²] = √[9 + 16] = √25 = 5。
适用范围
适用于欧几里得平面直角坐标系中任意两点。不适用于球面或曲面距离计算(如地球表面需用 Haversine 公式)。
原理图
开发者集成
3 种主流语言 · 复制即用
import math
# 两点距离
def distance(p1, p2):
return math.hypot(p2[0] - p1[0], p2[1] - p1[1])
# 直线方程(一般式 Ax + By + C = 0)
def line_from_points(p1, p2):
A = p2[1] - p1[1]
B = p1[0] - p2[0]
C = p2[0] * p1[1] - p1[0] * p2[1]
return A, B, C
# 点到直线距离
def point_to_line_distance(point, line):
A, B, C = line
x, y = point
return abs(A * x + B * y + C) / math.hypot(A, B)
# 示例
p1, p2 = (1, 2), (4, 6)
print(f"两点距离: {distance(p1, p2)}") # 5.0
line = line_from_points(p1, p2)
print(f"直线方程: {line[0]}x + {line[1]}y + {line[2]} = 0") # 4x + -3y + 2 = 0
print(f"点到直线距离: {point_to_line_distance((0, 0), line)}") # 0.4package main
import (
"fmt"
"math"
)
type Point struct{ X, Y float64 }
type Line struct{ A, B, C float64 }
func distance(p1, p2 Point) float64 {
dx, dy := p2.X-p1.X, p2.Y-p1.Y
return math.Sqrt(dx*dx + dy*dy)
}
func lineFromPoints(p1, p2 Point) Line {
return Line{
A: p2.Y - p1.Y,
B: p1.X - p2.X,
C: p2.X*p1.Y - p1.X*p2.Y,
}
}
func pointToLineDistance(p Point, l Line) float64 {
return math.Abs(l.A*p.X+l.B*p.Y+l.C) / math.Sqrt(l.A*l.A+l.B*l.B)
}
func main() {
p1, p2 := Point{1, 2}, Point{4, 6}
fmt.Printf("两点距离: %.1f\n", distance(p1, p2)) // 5.0
line := lineFromPoints(p1, p2)
fmt.Printf("直线方程: %.0fx + %.0fy + %.0f = 0\n", line.A, line.B, line.C)
fmt.Printf("点到直线距离: %.1f\n", pointToLineDistance(Point{0, 0}, line)) // 0.4
}// 两点距离
const distance = ([x1, y1], [x2, y2]) =>
Math.hypot(x2 - x1, y2 - y1);
// 直线方程(一般式 Ax + By + C = 0)
const lineFromPoints = ([x1, y1], [x2, y2]) => {
const A = y2 - y1;
const B = x1 - x2;
const C = x2 * y1 - x1 * y2;
return { A, B, C };
};
// 点到直线距离
const pointToLineDistance = ([x, y], { A, B, C }) =>
Math.abs(A * x + B * y + C) / Math.hypot(A, B);
// 示例
const p1 = [1, 2], p2 = [4, 6];
console.log(`两点距离: ${distance(p1, p2)}`); // 5.0
const line = lineFromPoints(p1, p2);
console.log(`直线方程: ${line.A}x + ${line.B}y + ${line.C} = 0`);
console.log(`点到直线距离: ${pointToLineDistance([0, 0], line)}`); // 0.4常见问题
9 个高频疑问