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}}
$$
代码对应关系
你的代码逻辑和公式完全匹配:
d = distance(prevPoint, curPoint)计算的是线段AB的长度,对应公式中的分母dx和dy是AB方向的单位向量(将AB的分量除以长度d得到)- 最终计算的
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
相关产品推荐
相关产品推荐

