def test_get_tangent_point_from_lines(self, params):
        line0 = params['line0']
        line1 = params['line1']
        intersection = params['intersection']

        assert Geometry.get_tangent_point_from_lines(line0,
                                                     line1) == intersection
Exemple #2
0
    def arrange(self, motions: List) -> List:
        size = len(motions)

        if size < 3:
            return super().arrange()

        new_motions = [i for i in motions]
        previous_move = None

        idx = 0
        while idx < len(new_motions):
            next_ = prev_ = None
            current = new_motions[idx]
            if idx - 1 >= 0:
                prev_ = new_motions[idx - 1]
            if idx + 1 < len(new_motions):
                next_ = new_motions[idx + 1]

            if prev_ and next_ and isinstance(
                    prev_, Translation) and isinstance(next_, Translation):

                if not prev_.is_parallel_with(
                        current) and not next_.is_parallel_with(current):
                    line0 = Line(prev_.end, prev_.vector)
                    line1 = Line(next_.start, next_.vector)
                    another_point = Geometry.get_tangent_point_from_lines(
                        line0, line1)
                    if Geometry.is_beyond_point(another_point, prev_.end,
                                                prev_.vector):
                        new_motions.insert(
                            idx, Translation(prev_.end, another_point))
                        idx += 1
                        rot = Rotation(another_point, next_.start,
                                       prev_.vector, next_.vector)
                        new_motions[idx] = rot
                    else:
                        rot = Rotation.new_from_translations(prev_, current)
                        new_motions.insert(idx, rot)
            elif prev_ is not None and isinstance(prev_, Translation):
                rot = Rotation.new_from_translations(prev_, current)
                new_motions.insert(idx, rot)

            idx += 1

        return new_motions
Exemple #3
0
def test_geometry_get_symmetrical(vector, axe, expected):
    assert expected == Geometry.get_symmetrical(vector, axe)
Exemple #4
0
def test_rotate_from_axe_with_reference_null():
    # when
    vector = NORTH
    reference = Point(0, 0)
    with pytest.raises(ZeroDivisionError):
        Geometry.transpose_rotation_relative_to(vector, reference)
Exemple #5
0
def test_rotate_from_axe_with_null():
    # when
    vector = Point(0, 0)
    reference = NORTH_WEST
    assert Geometry.transpose_rotation_relative_to(vector, reference) == vector
Exemple #6
0
def test_rotate_from_axe(vector, reference, expected):
    assert Geometry.transpose_rotation_relative_to(vector, reference) == expected
    # Reverse
    assert Geometry.transpose_rotation_relative_to(expected, Point(reference.x, - reference.y)) == vector
 def test_is_beyond(self, params):
     point = params['point']
     vector = params['vector']
     candidate = params['candidate']
     expected = params['expected']
     assert Geometry.is_beyond_point(candidate, point, vector) == expected