测试是两条线相交

时间:2017-12-24 10:38:51

标签: javascript lines line-intersection

所以这个问题已经有很多答案,但我无法找到一个针对我的具体问题。我有一个非常特殊的情况,只有正整数,总是一行总是相同的x值或相同的y值。我有两条这样的线,现在只需知道是否有交叉,而不是在哪里。我知道我可以使用任何普通的算法,但我相信这会完全过度。如果不告诉我。我已经拥有的代码是我的第三次尝试,这是一个完整的混乱,我不认为它有正确的方法。

1 个答案:

答案 0 :(得分:1)

你有两条线,由起点和终点决定。

{ (x1,y1), (x2,y2) }, { (x3,y3), (x4,y4) }

创建一个函数来查看两个范围是否重叠。

function rangeOverlaps(a1, a2, b1, b2) {
  let x1 = Math.min(a1, a2),
    x2 = Math.max(a1, a2),
    y1 = Math.min(b1, b2),
    y2 = Math.min(b1, b2);

  return x1 <= y2 && y1 <= x2;
}

用于查看x和y范围是否重叠的函数。

function linesIntersect(x1, x2, x3, x4, y1, y2, y3, y4) {
  return (rangeOverlaps(x1, x2, x3, x4) && rangeOverlaps(y1, y2, y3, y4));
}

&#13;
&#13;
function rangeOverlaps(a1, a2, b1, b2) {
  let x1 = Math.min(a1, a2),
    x2 = Math.max(a1, a2),
    y1 = Math.min(b1, b2),
    y2 = Math.min(b1, b2);
    
  return x1 <= y2 && y1 <= x2;
}

function linesIntersect(x1, x2, x3, x4, y1, y2, y3, y4) {
  return (rangeOverlaps(x1, x2, x3, x4) && rangeOverlaps(y1, y2, y3, y4));
}

let x1 = 0,
  y1 = 2,
  x2 = 2,
  y2 = 2,
  x3 = 0,
  y3 = 2,
  x4 = 1,
  y4 = 2;

let intersects = linesIntersect(x1, x2, x3, x4, y1, y2, y3, y4);

console.log(intersects);
&#13;
&#13;
&#13;