Java 如何检查两条线段是否相交?

Java 如何检查两条线段是否相交?,java,math,Java,Math,如何检查L1(p1,p2)和L2(p3,p4)两条线段是否相互相交?我不需要交点,我只需要知道它们是否相交。由于我的应用程序计算了很多,我需要找到一个快速的解决方案 谢谢我只想使用为您实现的方法,或者如果您想重新实现它,可以查看其源代码:要测试两条线段是否相交,可以使用Java的2D API,特别是 如果您有兴趣了解代码是如何工作的,为了查看您是否可以在特定领域中使其更快,您可以查看。 但请记住,在优化之前,一定要先进行概要分析;它可能已经足够快了。你是指几何线(无限延伸)?@ra_htial:

如何检查L1(p1,p2)和L2(p3,p4)两条线段是否相互相交?我不需要交点,我只需要知道它们是否相交。由于我的应用程序计算了很多,我需要找到一个快速的解决方案


谢谢

我只想使用为您实现的方法,或者如果您想重新实现它,可以查看其源代码:

要测试两条线段是否相交,可以使用Java的2D API,特别是

如果您有兴趣了解代码是如何工作的,为了查看您是否可以在特定领域中使其更快,您可以查看。
但请记住,在优化之前,一定要先进行概要分析;它可能已经足够快了。

你是指几何线(无限延伸)?@ra_htial:我们正在讨论你真正的问题。请参见Andreas Wederbrand回答下的讨论。如果我的编辑没有反映您的意图,请重新编辑。您的问题是关于Java的Java.awt.geom.Line2D(根据文档“表示(x,y)坐标空间中的线段”)还是延伸到无穷远的几何线?@ra_htial:您能接受答案吗?或者在讨论您的问题时带来一些东西吗?这里也是一样,linesIntersect检查的是直线,而不是线段。还有很多情况下直线相交,但不是线段javadoc说:测试从(x1,y1)到(x2,y2)的线段是否与从(x3,y3)到(x4,y4)的线段相交(强调我的)。马铃薯圣母:)我的错,一票赞成你,教授,我不明白你的要求。交点之后是什么?我猜他的意思是他也想知道线段在哪里相交。顺便问一下,有没有办法排除直线的端点,st.
(0,0,1,1)
(1,1,2,2)
不相交?@AlessioMTX这是另一个问题。首先,我会尝试阅读API方法……我在Line2D中找不到,因为我不知道这个API,我看了看,但没有找到解决方案,所以在这里被问到,可能我错过了。@AlessioMTX在google上的第一次点击:
Line2D line1 = new Line2D.Float(100, 100, 200, 200);
Line2D line2 = new Line2D.Float(150, 150, 150, 200);
boolean result = line2.intersectsLine(line1);
System.out.println(result); // => true

// Also check out linesIntersect() if you do not need to construct the line objects
// It will probably be faster due to putting less pressure on the garbage collector
// if running it in a loop
System.out.println(Line2D.linesIntersect(100,100,200,200,150,150,150,200));