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)
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
def test_non_overlapping_rectangles(self): start1, end1 = self.rec3 start2, end2 = self.rec5 assert not ft.rectangles_intersect(start1, end1, start2, end2)
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)
def test_containing_rectangles(self): start1, end1 = self.rec1 start2, end2 = self.rec4 assert ft.rectangles_intersect(start1, end1, start2, end2)
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)
def test_overlapping_rectangles(self): start1, end1 = self.rec1 start2, end2 = self.rec2 assert ft.rectangles_intersect(start1, end1, start2, end2)