线段与圆是否相交 c++实现
以下是判断线段与圆是否相交的C++实现代码:
- 判断线段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函数表示两个向量的叉积。
- 判断线段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函数表示两个向量的叉积
原文地址: https://www.cveoy.top/t/topic/cRnK 著作权归作者所有。请勿转载和采集!