贝利信息

c++中如何判断一个点是否在圆内_c++平面几何位置计算方法【详解】

日期:2026-01-16 00:00 / 作者:冰火之心
点P在圆内(含边界)当且仅当distance(P,O)≤r;用std::hypot计算欧氏距离可避免溢出,或直接比较距离平方以提升性能。

std::hypot 或距离平方比较判断点在圆内

核心就一条:点 P 在圆心为 O、半径为 r 的圆内(含边界),当且仅当 distance(P, O) 。但直接开方有性能和精度风险,实际应优先用距离平方比较。

处理浮点坐标的精度陷阱

px, oy, rfloatdouble 时,直接比较 distance 可能因舍入误差失败,尤其在临界点附近。

封装成可复用的函数模板

避免重复写距离平方逻辑,建议封装为带类型推导的函数,兼容 intfloatdouble 甚至自定义向量类。

template
bool is_point_in_circle(T px, T py, T cx, T cy, T r) {
    static_assert(std::is_arithmetic_v, "T must be arithmetic");
    auto dx = px - cx;
    auto dy = py - cy;
    return dx * dx + dy * dy <= r * r;
}

常见错误:混淆圆心坐标系或单位不一致

算法本身简单,但工程中出错多因数据来源混乱。

几何计算真正难的从来不是公式,而是确认所有坐标在同一参考系、同一单位、同一手性约定。写完 is_point_in_circle 后,务必用已知的边界点(圆心、圆上点、圆外点)手动验算三组输入。