以下是判断线段与圆是否相交的C++实现代码:

  1. 判断线段AB与圆O是否相交:
bool isIntersected(Point A, Point B, Point O, double r) {
    double d1 = dist(A, O) - r;
    double d2 = dist(B, O) - r;
    if (d1 * d2 <= 0) return true;
    double d3 = fabs(cross(O - A, B - A)) / dist(A, B);
    if (d3 > r) return false;
    return true;
}

其中,Point表示一个点的结构体,dist函数表示两个点之间的距离,cross函数表示两个向量的叉积。

  1. 判断线段AB所在直线与圆O是否相交:
bool isIntersected(Point A, Point B, Point O, double r) {
    double d = fabs(cross(O - A, B - A)) / dist(A, B);
    if (d > r) return false;
    double d1 = dist(A, O) - r;
    double d2 = dist(B, O) - r;
    if (d1 * d2 <= 0) return true;
    return false;
}

其中,同上,cross函数表示两个向量的叉积

线段与圆是否相交 c++实现

原文地址: https://www.cveoy.top/t/topic/cRnK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录