我们做两次
每次把一条线段视为直线,判断另一条线段的两个点是否在直线的两侧
如果两次都符合,说明直线相交
struct Point {
double x, y;
Point operator - (const Point &A) const {
Point B; B.x=x-A.x; B.y=y-A.y;
return B;
}
double operator ^ (const Point &A) const {
return x * A.y - y * A.x;
}
};
namespace Cross {
bool Line_cross(Point p1, Point p2, Point p3, Point p4) {
double a1 = (p1 - p2) ^ (p3 - p2);
double a2 = (p1 - p2) ^ (p4 - p2);
if(a1 * a2 >= 0) return false;
return true;
}
bool cross(Point p1, Point p2, Point p3, Point p4) {
bool t1 = Line_cross(p1, p2, p3, p4);
bool t2 = Line_cross(p3, p4, p1, p2);
return t1 && t2;
}
}