【问题标题】:Find out if two line segments intersect判断两条线段是否相交
【发布时间】:2016-10-16 15:43:19
【问题描述】:

我知道这应该很简单,但我无法弄清楚以下内容:我想编写一个函数来检查两条一维线是否相交。如果它们相交返回“true”,否则返回“false”。

我有两条名为 A 和 B 的线。每条线有两个端点(A1、A2 / B1、B2)。我的逻辑是,如果两条线相交“A2 >= B1 && B2 >= A1”为真。但是,这似乎不起作用。

function linesIntersect (A1, A2, B1, B2) {
  if (A2 >= B1 && B2 >= A1) {
  return true
  } else {
  return false
  }
}

欢迎任何帮助。谢谢!

【问题讨论】:

标签: javascript


【解决方案1】:

如果出现以下任一情况,两条线相交: a) 第一行在第二行之前开始,在第二行开始之后结束。 b) 反过来。 所以:

function overlap(A1,A2,B1,B2) {
    return (A1<=B1 && A2>=B1) || (B1<=A1 && B2>=A1);
}

或者:

function overlap(A1,A2,B1,B2) {
    return A1<=B1?A2>=B1:B2>=A1;
}

【讨论】:

  • 感谢您的回答。不过,返回应该是“假”或“真”。所以,问题是:如何检查 (A1=B1) || (B1=A1) 为真(线重叠)?
  • (A1=B1) || (B1=A1) 是一个布尔表达式,即正是您需要的,假或真,具体取决于您的参数。
  • 所以完整的功能是:function overlap(A1,A2,B1,B2){ return A1&lt;=B1?A2&gt;=B1:B2&gt;=A1;}
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 2013-05-19
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多