2015-12-07 51 views
0

Deveoping在矩形數組之間找到公共交集的函數,但該方法返回False時應該爲true。該函數調用類矩形中的相交函數。有什麼建議麼。你的問題的矩形數組中的公共點

Class Rectangle: 
    def intersects(self, other): 
     """Return true if a rectangle intersects the other rectangle.""" 
     return (self.top_right.x > other.bottom_left.x and self.bottom_left.x <  other.top_right.x and self.bottom_left.y < other.top_right.y and self.top_right.y > other.bottom_left.y) 

Class Many_Rect: 
    def common_point(self): 
     value = False 
     for i in range(len(self.rectangles) - 2): 
      for j in range(len(self.rectangles) - 1, -1, -1): 
       if self.rectangles[i].intersects(self.rectangles[j]) == True: 
        value = True 
       else: 
        return False 
     return True 
+0

您是否已經添加了一些輸出行以查看可能出錯?順便說一下,你已經寫了一個函數與兩個參數相交,而你只用一個參數來啓動它。那裏一切都好嗎? – Dominique

+0

我跑了輸出,還是看不到發現問題。是的,這是因爲第一個參數被認爲是正在測試的類變量,所以self是一個參數,而不是self.rectangles代表其他@Dominique – Stephanie

+0

我希望你已經寫了一些測試用例 - 你測試了你的代碼是否認爲兩個完全相同矩形相交? – barny

回答

0

部分是因爲在你的代碼,只要任何矩形不相交的函數返回假 - 但它不應該返回False,除非沒有矩形相交。但是,如果兩個矩形相交,那麼只要發現該矩形,就可以返回True,因爲沒有再檢查點。您的代碼應該是這樣的:

def common_point(self): 
    for i in range(len(self.rectangles) - 1): 
     for j in range(i+1,len(self.rectangles)): 
      if self.rectangles[i].intersects(self.rectangles[j]) 
       # these rectangles intersect - no point checking any more 
       return True 
    # none of the rectangles intersect 
    return False 

我不知道爲什麼你使用LEN(self.rectangles)-2作爲我的範圍 - 我認爲這應該是-1。另外j應該介於i + 1到len(self.rectangles)之間,否則當我== j時你總是會得到一個十字路口。我已經納入了這些更改。