我有一条由两点 p1 和 p2 组成的线段,以及由点 p3 和 p4 组成的第二条线段。我试图弄清楚它们是否相交,到目前为止,我还没有运气。到目前为止,这是我的代码:
public static double angle(Point p1, Point p2, Point p3) {
double AB = length(p2, p1);
double BC = length(p2, p3);
double AC = length(p3, p1);
return Math.acos((sqr(BC) + sqr(AB) - sqr(AC)) / (2 * BC * AB)) * (180 / Math.PI);
}
public static boolean doIntersect(Point p1, Point p2, Point p3, Point p4) {
double a = angle(p4, p3, p2);
double b = angle(p3, p2, p1);
double c = 180 - b - a;
System.out.println("a: " + a + ", b: " + b + ", c:" + c);
if((length(p3, p2) * Math.sin(a)) / Math.sin(c) > length(p2, p1)) return false;
if((length(p3, p2) * Math.sin(b)) / Math.sin(c) > length(p3, p4)) return false;
return true;
}
public static double length(Point point1, Point point2) {
return Math.sqrt(sqr(point1.x - point2.x) + sqr(point1.y - point2.y));
}
public static double sqr(double doub) {
return Math.pow(doub, 2);
}
但这行不通。有时,角度“c”甚至是负数。
此外,Point 是一个自定义类,有两个参数:x 和 y。应该是不言自明的。