Java中线和段的交集

时间:2014-04-17 02:04:57

标签: java math geometry computational-geometry

基本上,如果一条线和一条线段相交,我需要返回一个布尔值。对于该行,我所获得的信息是斜率,随机点的xy坐标和y截距的xy。对于线段,我有线段和两个端点xy坐标。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

实现这一点并不是非常困难,它似乎是最困难的概念部分。我可能稍后为此编写代码以获得乐趣,但这应该足以让您入门。此外,请注意,这可能是一个非常糟糕的解决方法(时间/空间),但它肯定会工作。

如果您想找到一个好的解决方案,请使用将该行转换为向量,并使用我所有文本下方链接中答案中的实现。

  1. 计算第二行的斜率。如果它与第一个相等,则它们是平行的,永远不会相交。
  2. 如果它们相交,计算两条 相交的线的位置。它们只能在一点交叉。这是你如何检查它们是否相交:
    • 在某个任意点找到每条线的2个不同坐标。
    • 确定每个点处两条线之间的距离。
    • 无论哪一点导致线条之间的距离较小,都表示您需要前往十字路口的方向。
    • 继续检查两条线之间的距离,直到它们开始增加(这意味着你需要再次反转方向)或直到距离为0.距离= 0的xy坐标是交点。
  3. 如果两条线相交的点的x值位于线段的两个x值之间,则线条和线条片段相交。
  4. 这对您来说应该更容易,因为您已经有第一行的两个xy坐标和线段的两个终点坐标。

    通过评论中的一些示例检查此答案以获得非常好的解决方案:https://stackoverflow.com/a/565282/2142219

答案 1 :(得分:0)

(Xr, Yr)的斜率为S的直线有等式D(X, Y):= (Y - Yr) - S (X - Xr) = 0

只需检查D(Xa, Ya)D(Xb, Yb)是否有相反的符号。