This question already has answers here:
Efficient maths algorithm to calculate intersections
(9个答案)
我有一个线段由两个点p1和p2组成,第二个线段由点p3和p4组成。我想知道它们是否相交,到目前为止,我还没有运气到目前为止这是我的代码:
但这不管用。有时,角度“c”甚至会显示为负数。
另外,point是一个具有两个参数的自定义类:x和y。应该是相当自解释的。
(9个答案)
我有一个线段由两个点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。应该是相当自解释的。
最佳答案
我建议先提出一个数学解决方案,验证它,然后尝试将其迁移到计算机程序中。
10-07 17:00