コード例 #1
0
    def test_what_points_object_contains_when_its_enclosed(self):
        obj_a = Object(2, (0, 0), [(0, 0)])

        obj_b = Object(1, (2, 2), [
            (0, 0),
            (1, 0),
            (2, 0),
            (3, 0),
            (3, 1),
            (3, 2),
            (2, 2),
            (1, 2),
            (0, 2),
            (0, 1),
        ])
        frame_model = ObjectRuntime.make_frame_model_from_objects(
            [obj_a, obj_b], 0)

        self.assertEqual(
            0,
            len(GeometryRuntime.points_contained_by_object(obj_a,
                                                           frame_model)))

        points_contained_by_b = GeometryRuntime.points_contained_by_object(
            obj_b, frame_model)
        self.assertEqual(2, len(points_contained_by_b))
        self.assertSequenceEqual([(3, 3), (4, 3)], points_contained_by_b)
コード例 #2
0
ファイル: ObjectRuntime.py プロジェクト: nd9600/arc
def are_objects_the_same_kind(a: Object.Object, b: Object.Object) -> bool:
    a_kind = a.get_object_kind()
    b_kind = b.get_object_kind()

    a_colour, a_relative_positions_string = a_kind.split(":")
    b_colour, b_relative_positions_string = b_kind.split(":")

    if a_colour != b_colour:
        return False

    # we convert to sets so that the order of the relative_positions doesn't matter
    a_relative_positions = set(
        map(lambda position: (position[0], position[1]),
            json.loads(a_relative_positions_string)))
    b_relative_positions = set(
        map(lambda position: (position[0], position[1]),
            json.loads(b_relative_positions_string)))

    b_rotated_90: Object.Object = GeometryRuntime.relatively_rotate_object_90(
        b)
    b_rotated_180: Object.Object = GeometryRuntime.relatively_rotate_object_180(
        b)
    b_rotated_270: Object.Object = GeometryRuntime.relatively_rotate_object_270(
        b)

    relative_positions_are_the_same_after_some_rotation = (
        a_relative_positions == b_relative_positions
        or a_relative_positions == set(b_rotated_90.relative_positions)
        or a_relative_positions == set(b_rotated_180.relative_positions)
        or a_relative_positions == set(b_rotated_270.relative_positions))
    return relative_positions_are_the_same_after_some_rotation
コード例 #3
0
ファイル: test_rotatingObjects.py プロジェクト: nd9600/arc
 def test_rotating_line_90_degrees(self):
     obj = Object(1, (1, 0), [
         (0, 0),
         (1, 0),
         (2, 0),
     ])
     rotated_obj: Object = GeometryRuntime.relatively_rotate_object_90(obj)
     self.assertEqual([
         (0, 0),
         (0, 1),
         (0, 2),
     ], rotated_obj.relative_positions)
コード例 #4
0
ファイル: test_rotatingObjects.py プロジェクト: nd9600/arc
    def test_rotating_l_shape_360_degrees_doesnt_move_it_at_all(self):
        obj = Object(1, (1, 0), [
            (0, 0),
            (1, 0),
            (2, 0),
            (2, 1),
        ])

        rotated_obj: Object = GeometryRuntime.relatively_rotate_object(
            360, obj)
        self.assertEqual(obj.top_left_offset, rotated_obj.top_left_offset)
        self.assertEqual(obj.relative_positions,
                         rotated_obj.relative_positions)
コード例 #5
0
ファイル: test_rotatingObjects.py プロジェクト: nd9600/arc
    def test_relatively_rotating_l_shape_270_degrees_when_it_wouldnt_go_off_top_of_grid(
            self):
        obj = Object(1, (5, 5), [
            (0, 0),
            (1, 0),
            (2, 0),
            (2, 1),
        ])

        rotated_obj: Object = GeometryRuntime.relatively_rotate_object_270(obj)
        self.assertEqual((5, 3), rotated_obj.top_left_offset)
        self.assertEqual([(0, 2), (0, 1), (0, 0), (1, 0)],
                         rotated_obj.relative_positions)
コード例 #6
0
    def test_is_point_enclosed_in_cropped_rectangle(self):
        relative_positions = [
            (0, 0),
            (1, 0),
            (2, 0),
            (3, 0),
            (3, 1),
            (3, 2),
            (2, 2),
            (1, 2),
            (0, 2),
            (0, 1),
        ]
        obj = Object(1, (0, 0), relative_positions)
        frame_model = ObjectRuntime.make_frame_model_from_objects([obj], 0)

        for pos in relative_positions:
            self.assertFalse(
                GeometryRuntime.is_point_fully_enclosed(pos, frame_model))
        self.assertTrue(
            GeometryRuntime.is_point_fully_enclosed((1, 1), frame_model))
        self.assertTrue(
            GeometryRuntime.is_point_fully_enclosed((2, 1), frame_model))
コード例 #7
0
    def test_what_points_object_contains_when_its_not_enclosed(self):
        obj_a = Object(1, (1, 1), [
            (0, 0),
            (1, 0),
            (2, 0),
            (3, 0),
            (3, 2),
            (2, 2),
            (1, 2),
            (0, 2),
            (0, 1),
        ])
        obj_b = Object(2, (5, 5), [(0, 0)])

        frame_model = ObjectRuntime.make_frame_model_from_objects(
            [obj_a, obj_b], 0, False)
        points_contained_by_b = GeometryRuntime.points_contained_by_object(
            obj_a, frame_model)
        self.assertEqual(0, len(points_contained_by_b))
コード例 #8
0
    def test_what_points_object_contains_when_theres_another_object_in_the_way(
            self):
        obj_a = Object(1, (1, 1), [
            (0, 0),
            (1, 0),
            (2, 0),
            (3, 0),
            (3, 2),
            (3, 3),
            (2, 2),
            (1, 2),
            (0, 2),
            (0, 1),
        ])
        obj_b = Object(2, (5, 5), [(0, 0)])
        obj_c = Object(3, (4, 2), [(0, 0)])

        frame_model = ObjectRuntime.make_frame_model_from_objects(
            [obj_a, obj_b, obj_c], 0, False)
        points_contained_by_b = GeometryRuntime.points_contained_by_object(
            obj_a, frame_model)
        self.assertEqual(0, len(points_contained_by_b))
コード例 #9
0
    def test_is_point_enclosed_in_rectangle(self):
        obj_a = Object(2, (0, 0), [(0, 0)])

        relative_positions = [
            (0, 0),
            (1, 0),
            (2, 0),
            (3, 0),
            (3, 1),
            (3, 2),
            (2, 2),
            (1, 2),
            (0, 2),
            (0, 1),
        ]
        obj_b = Object(1, (2, 2), relative_positions)
        frame_model = ObjectRuntime.make_frame_model_from_objects(
            [obj_a, obj_b], 0)

        self.assertFalse(
            GeometryRuntime.is_point_fully_enclosed((0, 0), frame_model))
        for pos in obj_b.convert_to_absolute_positions():
            self.assertFalse(
                GeometryRuntime.is_point_fully_enclosed(pos, frame_model))

        self.assertFalse(
            GeometryRuntime.is_point_fully_enclosed((1, 0), frame_model))
        self.assertFalse(
            GeometryRuntime.is_point_fully_enclosed((1, 1), frame_model))
        self.assertFalse(
            GeometryRuntime.is_point_fully_enclosed((0, 1), frame_model))

        self.assertTrue(
            GeometryRuntime.is_point_fully_enclosed((3, 3), frame_model))
        self.assertTrue(
            GeometryRuntime.is_point_fully_enclosed((4, 3), frame_model))