2015-12-07 3 views
0

Выделение функции, которая находит общее пересечение между массивом прямоугольников, однако метод возвращает False, когда он должен быть истинным. Функция вызывает функцию пересечения в прямоугольнике класса. Какие-либо предложения.Общие точки в массиве прямоугольников

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.rectangles представляет собой другой @Dominique – Stephanie

+0

Надеюсь, вы написали несколько тестовых примеров: протестировали ли вы, что ваш код считает, что два одинаковых прямоугольники пересекаются? – barny

ответ

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, вы всегда получите пересечение. Я включил эти изменения.

Смежные вопросы