在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