如何检查两条线段是否相交?
如何检查两条线段L1(p1,p2)和L2(p3,p4)是否相互交叉?我不需要交点,我只需要知道它们是否相交。由于我的应用程序计算了很多,我需要找到一个快速的解决方案。如何检查两条线段是否相交?
感谢
要测试两条线段是否相交,可以使用Java的2D API,特别是Line2D的方法。
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));
如果你有兴趣找出代码是如何工作的,为了看你是否能在您的特定领域,使其更快,你可以检查出the code for OpenJDK implementation。 但请记住,在进行优化之前,始终需要进行配置。它可能足够快,因为它是。
如果一个也是在交点之后呢? – aaronsnoswell 2013-08-30 07:54:46
对不起,我不明白你在问什么。交点之后是什么? – oligofren 2013-09-06 12:37:24
我认为他的意思是他也想知道这些段相交的地方。顺便说一句,有没有一种方法可以排除线的端点,st。 '(0,0,1,1)'和'(1,1,2,2)'不相交? – 2013-10-10 14:24:35
你是指几何线(无限延伸)? – likeitlikeit 2013-05-02 08:41:44
@ra_htial:我们正在讨论你真正想问什么。请参阅Andreas Wederbrand的回答下的讨论。如果我的编辑未反映您的意图,请重新编辑它。 是关于Java的java.awt.geom.Line2D(根据文档“代表(x,y)坐标空间中的线段”)或延伸到无穷大的几何线的问题? – oligofren 2013-05-02 09:37:13
@ra_htial:你能接受一个答案,或者就你所问的问题进行讨论吗? – oligofren 2013-06-07 07:49:39