测试是两条线相交
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);
所以这个问题已经有很多答案,但我找不到适合我的具体问题的答案。我有一个非常特殊的情况,只有正整数,其中一行总是具有相同的 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);