在1维平面上给定两条水平线。我想检查它们是否在任何时候重叠。检查一条线是否包含另一条线的一部分
下面我显示了一些重叠的例子。请注意,像[1,2]
和[2,3]
这样的区间具有“碰触”边界,但它们并不相互重叠。 [1,2]
基本上是一条从x轴上的1到x轴上的2条线。
我的问题是,什么是详尽组检查了这样的条件。这些是我想出的,假设第一行被称为a,第二行称为b。
b.s <= a.s && b.e > a.s
b.s <= a.s && b.e >= a.e
b.s < a.e && b.e >= a.e
b.s > a.s && b.e < a.s
这真的很复杂吗?如果两条线重叠/一条线包含另一条线,是不是有一个更简单的方法?
Aliter 通过查看否定条件
public boolean isOverlap(Interval i1, Interval i2)
{
// if(i2.start <= i1.start && i2.end > i1.start)
// return true;
//
// if(i2.start <= i1.start && i2.end >= i1.end)
// return true;
//
// if(i2.start < i1.end && i2.end >= i1.end)
// return true;
//
// if(i2.start >= i1.start && i2.end <= i1.end)
// return true;
//
// return false;
if(i2.start <= i1.start && i2.end <= i1.start)
return false;
if(i2.start >= i1.end && i2.end >= i1.end)
return false;
return true;
}
'A.S
@ n.m。感谢您的回复,但这是另一个需要添加的条件吗? – PepperBoy
不,这是整个条件。它取代你的支票。它假定a