Checking for range overlap (检查范围重叠)

7 浏览
0 Comments

Checking for range overlap (检查范围重叠)

我正在尝试实现一个函数,该函数接受两个表示线段的对象,并返回它们是否重叠。

以下是函数的可视化效果:

示例1:

检查重叠({start:0, end:10}, {start:8, end:15})

可视化如下:

0--------10

8-------15

^ 重叠

返回true。

示例2:

检查重叠({start:12, end:15}, {start:0, end:10})

可视化如下:

12-------15

0--------10

无重叠

返回false。

这是我目前的函数,它对一些情况有效,但并非全部:

function checkOverlap(lineA, lineB) {

var result;

for(var a in lineA) {

for(var b in lineB) {

if(a.end > b.start) {

result = true;

} else {

result = true;

}

}

}

return result;

}

0
0 Comments

Checking for range overlap是一个常见的问题,即判断两个区间是否有重叠部分。在给定的内容中,提到了一个关于判断重叠的函数,但是该函数在某些情况下可能会出现错误。

假设有两个区间a和b,其中a = {start: 1, end: 2},b = {start: 0, end: 10}。如果将区间{start: 0, end: 10}和{start: 10, end: 15}视为重叠的话,可以使用以下代码进行判断:

function checkOverlap(lineA, lineB) {
    return lineA.start >= lineB.start && lineA.start <= lineB.end || 
           lineA.end >= lineB.start && lineA.end <= lineB.end ||
           lineB.start >= lineA.start && lineB.start <= lineA.end || 
           lineB.end >= lineA.start && lineB.end <= lineA.end;
}

但是,如果不将{start: 0, end: 10}和{start: 10, end: 15}视为重叠的话,可以使用以下代码进行判断:

function checkOverlap(lineA, lineB) {
    return lineA.start > lineB.start && lineA.start < lineB.end || 
           lineA.end > lineB.start && lineA.end < lineB.end ||
           lineB.start > lineA.start && lineB.start < lineA.end || 
           lineB.end > lineA.start && lineB.end < lineA.end;
}

然而,这个函数在某些情况下可能会出现错误,例如给定lineA = {start: 0, end: 10}和lineB = {start: 10, end: 20}时,判断结果可能是错误的。

根据上述讨论的情况,是否将这种情况视为重叠取决于具体需求。如果不将其视为重叠,则需要将代码中的所有情况中的“=”符号删除。

请指定具体情况,即在仅仅“接触”时应该返回true还是false。

0
0 Comments

检查范围重叠的问题出现的原因是在给定的两个对象之间进行边界检查时,无法正确判断重叠。该问题的解决方法是修改边界检查函数,使其能够正确地判断范围是否重叠。

解决方法如下:

function checkOverlap(o1, o2) {
    return (
       o1.start >= o2.start && o1.start <= o2.end ||
       o1.end >= o2.start && o1.end <= o2.end ||
       o2.start >= o1.start && o2.start <= o1.end ||
       o2.end >= o1.start && o2.end <= o1.end
    );
}
console.log(checkOverlap({start: 0, end: 10}, {start: 8, end: 15}));   // true
console.log(checkOverlap({start: 8, end: 15}, {start: 0, end: 10}));   // true
console.log(checkOverlap({start: 12, end: 15}, {start: 0, end: 10}));  // false
console.log(checkOverlap({start: 0, end: 10}, {start: 12, end: 15}));  // false
console.log(checkOverlap({start: 12, end: 15}, {start: 16, end: 17})); // false
console.log(checkOverlap({start: 16, end: 17}, {start: 12, end: 15})); // false
console.log(checkOverlap({start: 1, end: 2}, {start: 0, end: 10}));    // true
console.log(checkOverlap({start: 0, end: 10}, {start: 1, end: 2}));    // true
console.log(checkOverlap({start: 0, end: 10}, {start: 10, end: 20}));  // true
console.log(checkOverlap({start: 10, end: 20}, {start: 0, end: 10}));  // true

上述解决方法使用了逻辑运算符 && 和 || 来判断四种情况下的范围重叠情况。通过修改边界检查函数,可以正确地判断给定对象之间的范围是否重叠。

注意:在某些情况下,如示例中的 lineA 和 lineB,由于边界重叠,原始的边界检查函数无法正确判断重叠,但经过修改后的函数可以正确返回 true。

0
0 Comments

Checking for range overlap是一个检测范围重叠的问题。问题的原因是需要满足两个条件:

1. o1的结束值减去o2的开始值大于0(即o1.end - o2.start > 0),或者等于0(即o1.end - o2.start >= 0),表示o1的结束值在o2的范围内,满足重叠条件。

2. o2的结束值减去o1的开始值大于0(即o2.end - o1.start > 0),或者等于0(即o2.end - o1.start >= 0),表示o2的结束值在o1的范围内,满足重叠条件。

为了解决这个问题,可以使用以下的JavaScript代码:

function checkOverlap(o1, o2) {
  return ((o1.end - o2.start) > 0 && (o2.end - o1.start) > 0) ? true : false;
}
console.log(checkOverlap({start: -10, end: 0}, {start: 0, end: 10}));   // false
console.log(checkOverlap({start: -20, end: -10}, {start: -5, end: 5})); // false
console.log(checkOverlap({start: 5, end: 10}, {start: 10, end: 20}));   // false
console.log(checkOverlap({start: -10, end: 0}, {start: -5, end: 5}));   // true
console.log(checkOverlap({start: -5, end: 5}, {start: -10, end: 0}));   // true
console.log(checkOverlap({start: 0, end: 10}, {start: 5, end: 15}));    // true
console.log(checkOverlap({start: 5, end: 15}, {start: 0, end: 10}));    // true

以上代码可以输出范围是否重叠的结果。

对于这段代码,还可以添加以下的CSS样式来改善控制台的显示效果:

.as-console-wrapper { max-height: 100% !important; top: 0; }

这样可以解决在黑色背景上看不清楚图形的问题。如果需要查看图形,可以点击图形或在新标签中打开。

通过以上的解决方法,可以准确地判断两个范围是否重叠。

0