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