距离公式练习题

在解析几何中,“距离公式”不仅是考试的高频考点,更是我们在构建现代Web应用、游戏引擎和地图服务时的基石。虽然勾股定理看似简单,但在2026年的软件开发语境下,如何编写高性能、高精度且易于维护的几何计算逻辑,是我们需要深入探讨的话题。在这篇文章中,我们将结合传统的数学练习与先进的工程化理念,带你从第一性原理出发,掌握距离计算的精髓。

目录

  • 核心概念与数学基础回顾
  • 2026视角:距离公式的工程化实现
  • AI辅助开发与调试实战
  • 距离公式练习题:已解答
  • 距离公式练习题:未解答

核心概念与数学基础回顾

让我们快速回顾一下我们要用到的数学工具。在编写任何代码之前,确保我们的数学直觉是准确的。

> ### 两点之间的距离

>

> 给定两点 $A(x1, y1)$ 和 $B(x2, y2)$,它们之间的欧几里得距离 $d$ 为:

> $$d = \sqrt{(x2 – x1)^2 + (y2 – y1)^2}$$

>

> 在代码实现中,我们通常避免直接使用 Math.sqrt,除非必须得到线性距离,因为平方根运算在CPU周期中是非常昂贵的。

> ### 点到直线的距离

>

> 点 $P(x0, y0)$ 到直线 $Ax + By + C = 0$ 的距离公式为:

> $$d = \frac{

Ax0 + By0 + C

}{\sqrt{A^2 + B^2}}$$

>

> 这个公式在计算机图形学中常用于碰撞检测的预判阶段。

> ### 中点公式

>

> 连接两点 $A(x1, y1)$ 和 $B(x2, y2)$ 的线段中点 $M$ 为:

> $$M = \left( \frac{x1 + x2}{2}, \frac{y1 + y2}{2} \right)$$

2026视角:距离公式的工程化实现

在现代前端开发或Node.js后端服务中,我们不能仅仅在草稿纸上计算这些数值。我们需要考虑精度、性能和可维护性。

1. 性能优化:避免不必要的平方根

在我们最近的一个高性能2D物理引擎项目中,我们发现大量的计算时间都浪费在了距离计算上。实际上,如果只是为了比较两个点之间的远近(例如:寻找最近的敌人),我们完全不需要计算平方根。

原理: 如果 $\sqrt{a} > \sqrt{b}$,那么必然有 $a > b$。因此,我们可以直接比较“距离的平方”。
代码示例:

/**
 * 比较两个点相对于目标点的距离
 * @param {number} x1 - 第一个点的x坐标
 * @param {number} y1 - 第一个点的y坐标
 * @param {number} x2 - 第二个点的x坐标
 * @param {number} y2 - 第二个点的y坐标
 * @param {number} targetX - 目标点的x坐标
 * @param {number} targetY - 目标点的y坐标
 * @returns {number} - 返回较近点的索引 (1 或 2)
 */
function findClosestPoint(x1, y1, x2, y2, targetX, targetY) {
    // 我们计算距离平方,省略了昂贵的 Math.sqrt 操作
    // 这是一个经典的工程化取舍,牺牲了可读性换取性能
    const dist1Sq = (x1 - targetX) ** 2 + (y1 - targetY) ** 2;
    const dist2Sq = (x2 - targetX) ** 2 + (y2 - targetY) ** 2;

    // 如果你使用 Cursor 或 Copilot,AI 可能会建议写成 Math.hypot(...)
    // 但在热点代码路径中,手写展开运算通常更快
    if (dist1Sq < dist2Sq) {
        return 1; 
    } else {
        return 2;
    }
}

// 示例调用
const result = findClosestPoint(1, 1, 5, 5, 0, 0);
console.log(`点 ${result} 更接近目标。`); // 输出: 点 1 更接近目标

2. 精度陷阱:浮点数比较

我们在生产环境中经常遇到的问题是:浮点数运算并不精确。直接比较两个距离是否“相等”是危险的。

代码示例:处理浮点数误差

javascriptnconst EPSILON = 1e-10; // 定义一个极小的阈值

/**
* 安全地判断两个距离是否相等
*/
function areDistancesEqual(d1, d2) {
// 永远不要使用 d1 === d2
return Math.abs(d1 - d2) < EPSILON;
}

/**
* 计算两点间的精确距离(带精度处理)
*/
function getDistance(p1, p2) {
const dx = p2.x - p1.x;
const dy = p2.y - p1.y;
return Math.sqrt(dx * dx + dy * dy);
}
CODEBLOCK_6be8c67djavascript
/**
* 计算地球表面两个经纬度坐标之间的距离(单位:千米)
* 这是一个经典的地理信息系统 (GIS) 算法
*
* @param {number} lat1 - 点1的纬度
* @param {number} lon1 - 点1的经度
* @param {number} lat2 - 点2的纬度
* @param {number} lon2 - 点2的经度
*/
function getGeographicDistance(lat1, lon1, lat2, lon2) {
const R = 6371; // 地球半径,单位千米
const dLat = toRad(lat2 - lat1);
const dLon = toRad(lon2 - lon1);

const a =
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);

const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const d = R * c;
return d;

function toRad(val) {
return val * Math.PI / 180;
}
}

// 在我们最近的一个物流路径优化项目中,
// 这个函数每秒被调用数百万次,
// 因此我们甚至考虑使用 WebAssembly (Wasm) 来重写这一部分逻辑。
CODEBLOCK_eaa50bb4javascript
/**
* 计算点 P 到线段 AB 的最短距离
* 这是一个常见的游戏开发问题,用于判定子弹是否击中墙壁
*
* @param {Object} p - 目标点 {x, y}
* @param {Object} a - 线段端点A {x, y}
* @param {Object} b - 线段端点B {x, y}
*/
function distToSegment(p, a, b) {
// 1. 计算 AB 的向量长度平方
const l2 = (a.x - b.x) ** 2 + (a.y - b.y) ** 2;

// 边界情况:如果 A 和 B 重合,直接返回 P 到 A 的距离
if (l2 === 0) return Math.sqrt((p.x - a.x) ** 2 + (p.y - a.y) ** 2);

// 2. 计算投影参数 t (0 到 1 之间表示在线段内)
// t = ((p - a) . (b - a)) / |b - a|^2
let t = ((p.x - a.x) * (b.x - a.x) + (p.y - a.y) * (b.y - a.y)) / l2;

// 3. 限制 t 在 [0, 1] 区间内,找到线段上最近的点
t = Math.max(0, Math.min(1, t));

// 4. 计算投影点的坐标
const projX = a.x + t * (b.x - a.x);
const projY = a.y + t * (b.y - a.y);

// 5. 返回 P 到投影点的距离
return Math.sqrt((p.x - projX) ** 2 + (p.y - projY) ** 2);
}

当我们在调试此类复杂几何逻辑时,可视化 是关键。我们建议配置开发环境,使用 Canvas 或 SVG 实时绘制出这些点、线段和计算结果,而不是单纯盯着控制台里的数字。

距离公式练习题:已解答

让我们回到基础,通过这些练习题巩固我们的数学直觉。

1. 给定两点 A(3, 4) 和 B(7, 9),求它们之间的距离。

> 解:

> 为了找到两点 A(3, 4) 和 B(7, 9) 之间的距离,我们使用距离公式:

> $$d = \sqrt{(7 – 3)^2 + (9 – 4)^2}$$

> $$= \sqrt{16 + 25}$$

> $$= \sqrt{41}$$

> 所以,两点 A(3, 4) 和 B(7, 9) 之间的距离是 $\sqrt{41}$。

2. 求连接点 P(2, 5) 和 Q(8, -3) 的线段的中点。

> 解:

> 端点为 P(x₁, y₁) 和 Q(x₂, y₂) 的线段 PQ 的中点由中点公式给出:

> $$Midpoint = \left( \frac{x1 + x2}{2}, \frac{y1 + y2}{2} \right)$$

> $$= \left( \frac{2 + 8}{2}, \frac{5 + (-3)}{2} \right)$$

> $$= (5, 1)$$

> 所以,连接点 P(2, 5) 和 Q(8, -3) 的线段的中点是 (5, 1)。

3. 计算点 (4, -1) 到直线 3x + 4y – 7 = 0 的距离。

> 解:

> 点 $(x0, y0)$ 到直线 $Ax + By + C = 0$ 的距离公式为:

> $$distance = \frac{

Ax0 + By0 + C

}{\sqrt{A^2 + B^2}}$$

> $$= \frac{

3(4) + 4(−1) − 7

}{\sqrt{3^2 + 4^2}}$$

> $$= \frac{

12 − 4 − 7

}{\sqrt{9 + 16}}$$

> $$= \frac{

1

}{\sqrt{25}}$$

> $$= \frac{1}{5}$$

> 所以,点 (4, -1) 到直线 3x + 4y – 7 = 0 的距离是 0.2。

4. 点 (-1, 6) 到直线 2x – 3y + 5 = 0 的距离是多少?

> 解:

> $$distance = \frac{

2(−1) − 3(6) + 5

}{\sqrt{2^2 + (-3)^2}}$$

> $$= \frac{

−2 − 18 + 5

}{\sqrt{4 + 9}}$$

> $$= \frac{

−15

}{\sqrt{13}}$$

> $$= \frac{15}{\sqrt{13}}$$

> 有理化后结果为 $\frac{15\sqrt{13}}{13}$。

5. 求平行线 2x + 3y – 4 = 0 和 2x + 3y + 6 = 0 之间的距离。

> 解:

> 两条平行线 $Ax + By + C1 = 0$ 和 $Ax + By + C2 = 0$ 之间的距离公式为:

> $$distance = \frac{

C2 − C1

}{\sqrt{A^2 + B^2}}$$

> $$= \frac{

6 − (−4)

}{\sqrt{2^2 + 3^2}}$$

> $$= \frac{

10

}{\sqrt{13}}$$

> $$= \frac{10}{\sqrt{13}}$$

6. 计算平行线 4x – 3y – 9 = 0 和 4x – 3y + 7 = 0 之间的距离。

> 解:

> $$distance = \frac{

7 − (-9)

}{\sqrt{4^2 + (-3)^2}}$$

> $$= \frac{

16

}{\sqrt{25}}$$

> $$= \frac{16}{5}$$

7. 如果 A(-2, 1) 和 B(3, -4) 是两个点,求它们之间的距离。

> 解:

> $$d = \sqrt{(3 – (-2))^2 + (-4 – 1)^2}$$

> $$= \sqrt{25 + 25}$$

> $$= 5\sqrt{2}$$

8. 确定连接点 C(5, -2) 和 D(-3, 7) 的线段的中点。

> 解:

> $$Midpoint = \left( \frac{5 + (-3)}{2}, \frac{-2 + 7}{2} \right)$$

> $$= (1, 2.5)$$

9. 点 (1, 3) 到直线 5x – 2y + 8 = 0 的距离是多少?

> 解:

> $$distance = \frac{

5(1) − 2(3) + 8

}{\sqrt{5^2 + (-2)^2}}$$

> $$= \frac{

5 − 6 + 8

}{\sqrt{29}}$$

> $$= \frac{7}{\sqrt{29}}$$

距离公式练习题:未解答

我们建议你尝试通过手动计算解决以下问题,以建立数学直觉。之后,你可以编写简单的 JavaScript 脚本来验证你的答案。

  • 求点 $(1, 2)$ 到点 $(4, 6)$ 之间的距离。
  • 找出连接 $(-3, 5)$ 和 $(7, -5)$ 的线段的中点。
  • 计算点 $(2, 1)$ 到直线 $x – y + 1 = 0$ 的距离。
  • 如果点 $(x, y)$ 到原点 $(0,0)$ 的距离为 5 个单位,且满足 $x=3$,求 $y$ 的值。
  • 判断点 $(1, 2)$ 和点 $(2, 4)$ 是否在以原点为圆心、半径为 $\sqrt{5}$ 的圆上。

结语

无论是为了应对考试,还是为了构建下一代 Web 应用,掌握距离公式都是不可或缺的。随着 2026 年 AI 工具的普及,我们不仅要会“计算”,更要会“实现”和“优化”。希望这篇文章能帮助你在理论与实践之间架起桥梁。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/44849.html
点赞
0.00 平均评分 (0% 分数) - 0