判断两线段是否相交

我们做两次

每次把一条线段视为直线,判断另一条线段的两个点是否在直线的两侧

如果两次都符合,说明直线相交

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; 
	}
}

你可能感兴趣的:(计算几何)