矩形数组中的公共点

时间:2015-12-07 08:11:05

标签: python boolean rectangles intersect

发现一个函数,它找到一个矩形数组之间的公共交集,但是当它应该为true时,该方法返回False。该函数调用类矩形中的intersect函数。有什么建议。

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

1 个答案:

答案 0 :(得分:0)

你的部分问题是因为在你的代码中,只要任何矩形没有与你的函数相交,你的函数就会返回False - 但它不应该返回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作为i的范围 - 我认为这应该是-1。 j也应该介于i + 1到len(self.rectangles)之间,否则当i == j时你将总是得到一个交集。我已将这些变化纳入其中。