Ejemplo n.º 1
0
 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)))
Ejemplo n.º 2
0
 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)))
Ejemplo n.º 3
0
 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()
     ]
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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)))
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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))
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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))
Ejemplo n.º 11
0
    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)])
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
 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)))
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
 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()]
Ejemplo n.º 16
0
    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)