2011-12-12 75 views
1

我想爲我的Cuboid類編寫一個方法,該方法返回由兩個長方體相交定義的長方體。如何計算兩個長方體的交點

長方體在內部由一個原點和一個終點表示,這樣從原點到終點的矢量在所有維度上必然爲正。作爲一個起點(也許有用也許不是)下面的方法(在紅寶石中)確定兩個長方體是否相交。

def intersects? other_cuboid 
    return not(self.top < other_cuboid.bottom || 
       self.bottom > other_cuboid.top || 
       self.left > other_cuboid.right || 
       self.right < other_cuboid.left || 
       self.front < other_cuboid.back || 
       self.back > other_cuboid.front)  
end 

直覺似乎應該有一個相當吝嗇地解決了這個問題,但我想不出它...任何想法?

注:長方體必然與軸對齊

+0

投票關閉。在不知道Cuboid構造函數方法需要什麼參數的情況下,您應該如何返回一個Cuboid的新實例? – sawa

+1

「長方體」是否總是軸向對齊? – andand

回答

1

是不是好你的長方體的定義取決於基礎的你最初的選擇?

如果所有長方體都從原點開始,然後移動到每個軸的正方向,那麼交點不僅僅是每個方向上所有座標的最小值?即intersection = min(left1,left2),min(right1,right2)等等。不知道我確切地理解你的長方體是什麼,或者你想要它們是什麼。

另外,如果你的立方體在每一個方向排列(因爲它看起來像他們從你的定義),那麼你可以採取新的長方體有:

bottom = max(bottom1, bottom2) 
top = min(top1, top2) 
left = right_most(left1, left2) 

等等