测试是两条线相交

Test is two lines are intersecting

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

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

{ (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));
}

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);