Beispiel #1
0
 def test_adjacent_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec3
     assert ft.rectangles_intersect(start1,
                                    end1,
                                    start2,
                                    end2,
                                    open_sets=False)
     assert not ft.rectangles_intersect(
         start1, end1, start2, end2, open_sets=True)
Beispiel #2
0
 def crosses_obstacle(self, obstacle, open_sets=False):
     """
     Checks whether the line crosses the rectangular obstacle.
     Novel implementation based on hyperplanes and other linear algebra (*proud*)
     :param obstacle: The rectangular obstacle under consideration
     :param open_sets: Whether it counts as an intersection
      if the line passes inside of the obstacle (open_sets = True)
      or also counts when it passes through the obstacle boundary (open_sets = False)
     :return: True if line crosses obstacle, false otherwise
     """
     line_array = np.array([self.begin, self.end])
     rect_array = np.array(
         [[np.min(line_array[:, 0]),
           np.min(line_array[:, 1])],
          [np.max(line_array[:, 0]),
           np.max(line_array[:, 1])]])
     obs_array = np.array([obstacle.begin.array, obstacle.end.array])
     intersects = ft.rectangles_intersect(rect_array[0], rect_array[1],
                                          obs_array[0], obs_array[1],
                                          open_sets)
     if not intersects:
         return False
     f = ft.get_hyperplane_functional(line_array[0], line_array[1])
     obs_points = np.array([point.array for point in obstacle.corner_list])
     point_result = f(obs_points[:, 0], obs_points[:, 1])
     if np.sum(np.sign(point_result)) in [-4, 4]:
         return False
     else:
         return True
Beispiel #3
0
 def test_non_overlapping_rectangles(self):
     start1, end1 = self.rec3
     start2, end2 = self.rec5
     assert not ft.rectangles_intersect(start1, end1, start2, end2)
Beispiel #4
0
 def test_unorderable_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec5
     start3, end3 = self.rec6
     assert ft.rectangles_intersect(start1, end1, start2, end2)
     assert ft.rectangles_intersect(start1, end1, start3, end3)
Beispiel #5
0
 def test_containing_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec4
     assert ft.rectangles_intersect(start1, end1, start2, end2)
Beispiel #6
0
 def test_adjacent_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec3
     assert ft.rectangles_intersect(start1, end1, start2, end2, open_sets=False)
     assert not ft.rectangles_intersect(start1, end1, start2, end2, open_sets=True)
Beispiel #7
0
 def test_overlapping_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec2
     assert ft.rectangles_intersect(start1, end1, start2, end2)
Beispiel #8
0
 def test_non_overlapping_rectangles(self):
     start1, end1 = self.rec3
     start2, end2 = self.rec5
     assert not ft.rectangles_intersect(start1, end1, start2, end2)
Beispiel #9
0
 def test_unorderable_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec5
     start3, end3 = self.rec6
     assert ft.rectangles_intersect(start1, end1, start2, end2)
     assert ft.rectangles_intersect(start1, end1, start3, end3)
Beispiel #10
0
 def test_containing_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec4
     assert ft.rectangles_intersect(start1, end1, start2, end2)
Beispiel #11
0
 def test_overlapping_rectangles(self):
     start1, end1 = self.rec1
     start2, end2 = self.rec2
     assert ft.rectangles_intersect(start1, end1, start2, end2)