You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中点到两点连线的垂直距离:代码正确性验证及公式查询

代码正确性判断与解释

这段代码是正确的,它完全符合点到直线的垂直距离计算公式。

原理推导

点到直线的垂直距离,本质是利用向量叉乘的几何意义:对于直线上两点prevPoint(A)、curPoint(B),以及目标点newPoint(P),距离等于向量AB与向量AP的叉乘绝对值,除以AB的长度,公式为:
$$
\text{dist} = \frac{|(B_x - A_x)(P_y - A_y) - (B_y - A_y)(P_x - A_x)|}{\sqrt{(B_x - A_x)^2 + (B_y - A_y)^2}}
$$

代码对应关系

你的代码逻辑和公式完全匹配:

  1. d = distance(prevPoint, curPoint) 计算的是线段AB的长度,对应公式中的分母
  2. dx和dy是AB方向的单位向量(将AB的分量除以长度d得到)
  3. 最终计算的distToLine展开后等价于公式:
    abs((newPoint.x - prevPoint.x) * dy - (newPoint.y - prevPoint.y) * dx)
    // 代入dx、dy的定义后:
    = abs( [(newPoint.x - prevPoint.x)*(curPoint.y - prevPoint.y) - (newPoint.y - prevPoint.y)*(curPoint.x - prevPoint.x)] / d )
    

注意事项

  • 需要处理prevPoint与curPoint重合的边界情况:此时d=0会触发除零错误,建议计算前增加判断:
    if (d < 1e-9) {
        // 两点重合时,距离退化为点到点的距离
        distToLine = distance(newPoint, prevPoint);
    }
    
  • 由于Point的x、y是int类型,计算时会自动提升为double,不存在精度丢失问题。

内容的提问来源于stack exchange,提问作者Carolyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:17:24