def test_contains_point(self): polygon = Polygon([Vec2d(1, 0), Vec2d(0, 0), Vec2d(0, 1), Vec2d(1, 1)]) self.assertTrue(polygon.contains_point(Vec2d(0.5, 0.5))) self.assertFalse(polygon.contains_point(Vec2d(2, 0))) self.assertFalse(polygon.contains_point(Vec2d(1, 0))) self.assertFalse(polygon.contains_point(Vec2d(0, 0))) self.assertFalse(polygon.contains_point(Vec2d(0, 1))) self.assertFalse(polygon.contains_point(Vec2d(1, 1)))
def test_contains_point2(self): polygon = Polygon([ Vec2d(270, 338), Vec2d(333, 336), Vec2d(338, 293), Vec2d(338, 229), Vec2d(289, 196), Vec2d(225, 196), Vec2d(190, 262), Vec2d(190, 326), Vec2d(206, 338) ]) self.assertTrue(polygon.contains_point(Vec2d(241, 292))) self.assertFalse(polygon.contains_point(Vec2d(396, 391)))
def __init__(self, entity): self.entity = entity self.polygon = Polygon.rectangular_polygon(64, 64) self.points = [ self.entity.position + point for point in self.polygon.get_points() ]
def create_polygons(vertex_lists): from lib.geometry.polygon import Polygon polygons = [] for vertex_list in vertex_lists: polygons.append(Polygon(vertex_list)) return polygons
def compute_c_polygon(self, agent): agent_points = copy_points_list(agent.get_points()) all_points = [] for point in self.get_points(): for agent_point in agent_points: all_points.append(point - agent_point) c_polygon_points = generate_convex_hull(all_points) return Polygon(c_polygon_points)
def __init__(self, planner=None): self.entities = [] self.obstacles = [] self.planner = planner message_handlers = { MESSAGE_TYPE.CREATE_ENTITY: self.handle_create_entity, MESSAGE_TYPE.MOVE_ENTITY: self.handle_move_entity, MESSAGE_TYPE.INIT_MOVEMENT_PLANNER: self.handle_init_movement_planner, } self.agent_prototype = Polygon.rectangular_polygon(64, 64) super(MovementSystem, self).__init__(message_handlers)
def test_border_non_intersect(self): polygon = Polygon() polygon.add_point(0, 0) polygon.add_point(0, 1) polygon.add_point(1, 1) polygon.add_point(1, 0) line1 = [Vec2d(0, 0), Vec2d(1, 0)] self.assertFalse(intersect_polygon(line1, polygon))
def test_same_start_point_is_node(self): polygon = Polygon() polygon.add_point(0, 1) polygon.add_point(0, 2) polygon.add_point(1, 2) polygon.add_point(1, 1) planner = AStarPlanner() planner.add_polygon(polygon) planner.init() planner.find_path(0, 0, 1, 2)
def test_basic_polygon_intersect(self): poly = Polygon() poly.add_point(0, 0) poly.add_point(0, 1) poly.add_point(1, 1) poly.add_point(1, 0) line = [Vec2d(-0.5, -0.5), Vec2d(0.5, 0.5)] self.assertTrue(intersect_polygon(line, poly)) line = [Vec2d(1, -1), Vec2d(1, 0)] self.assertFalse(intersect_polygon(line, poly))
def test_line_intersect_epsilon(self): polygon = Polygon([ Vec2d(540, 591), Vec2d(600, 571), Vec2d(590, 440), Vec2d(542, 471), Vec2d(533, 576) ]) planner = AStarPlanner() planner.add_polygon(polygon) planner.init() path = planner.find_path(596, 526, 462, 516) self.assertEquals(path, [Vec2d(600, 571), Vec2d(540, 591), Vec2d(462, 516)])
def generate_random_polygon(x_max, y_max, max_points): from lib.geometry.polygon import Polygon points = [] i = 0 while i < max_points: x = random.randint(0, x_max) y = random.randint(0, y_max) if Vec2d(x, y) in points: continue else: points.append(Vec2d(x, y)) i += 1 hull_points = generate_convex_hull(points) return Polygon(hull_points)
def test_contains_point2(self): polygon = Polygon([Vec2d(270, 338), Vec2d(333, 336), Vec2d(338, 293), Vec2d(338, 229), Vec2d(289, 196), Vec2d(225, 196), Vec2d(190, 262), Vec2d(190, 326), Vec2d(206, 338)]) self.assertTrue(polygon.contains_point(Vec2d(241, 292))) self.assertFalse(polygon.contains_point(Vec2d(396, 391)))
def __init__(self, shape_component): self.shape_component = shape_component self.font = pygame.font.Font(None, 15) self.agent_prototype = Polygon.rectangular_polygon(64, 64)
def __init__(self, entity): self.entity = entity self.polygon = Polygon.rectangular_polygon(64, 64) self.points = [self.entity.position + point for point in self.polygon.get_points()]
def ztest_visual(self): pygame.init() size = width, height = 320, 240 screen = pygame.display.set_mode(size, 0, 32) clock = pygame.time.Clock() black = (0, 0, 0) white = (255, 255, 255) green = (0, 255, 0) red = (255, 0, 0) bleh = (155, 10, 110) poly = Polygon() poly.add_point(50, 0) poly.add_point(50, 50) poly.add_point(0, 50) poly.add_point(0, 0) poly2 = Polygon() poly2.add_point(50, 0) poly2.add_point(50, 50) poly2.add_point(0, 50) poly2.add_point(0, 0) c_poly = poly.compute_c_polygon(poly2) print c_poly screen.fill(white) for point in poly.get_points(): print point draw_color = black pygame.draw.circle(screen, draw_color, (point.x + 200, height - point.y - 100), 3, 3) print(point.x + 200, height - point.y - 200) for point in c_poly.get_points(): print point draw_color = green pygame.draw.circle(screen, draw_color, (point.x + 200, height - point.y - 100), 3, 3) print(point.x + 200, 200 + height - point.y) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() keys = pygame.key.get_pressed() if keys[pygame.K_ESCAPE]: sys.exit() # num_hull_points = len(hull_points) # for i in range(num_hull_points): # point_a = (hull_points[(i + 1) % num_hull_points].x, -hull_points[(i + 1) % num_hull_points].y) # point_b = (hull_points[i].x, -hull_points[i].y) # pygame.draw.line(screen, red, point_a, point_b) # pygame.display.flip() pygame.display.flip() pygame.display.update() clock.tick(30)