叉乘C++判线段相交
时间: 2023-11-14 18:07:50 浏览: 110
判断两线段是否相交
叉乘可以用来判断两条线段是否相交。具体做法是将线段 AB 和 CD 分别表示为向量 AB 和 CD,然后计算它们的叉积 AC × AD 和 BC × BD。如果两个向量的叉积符号不同,那么线段相交。
代码实现如下:
```c++
struct Point {
double x, y;
};
// 计算向量 AB 和 AC 的叉积
double cross(Point A, Point B, Point C) {
return (B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y);
}
// 判断线段 AB 和 CD 是否相交
bool intersect(Point A, Point B, Point C, Point D) {
double c1 = cross(A, B, C), c2 = cross(A, B, D);
double c3 = cross(C, D, A), c4 = cross(C, D, B);
return (c1 * c2 < 0 && c3 * c4 < 0);
}
```
阅读全文