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
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
def test_geometry_get_symmetrical(vector, axe, expected): assert expected == Geometry.get_symmetrical(vector, axe)
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)
def test_rotate_from_axe_with_null(): # when vector = Point(0, 0) reference = NORTH_WEST assert Geometry.transpose_rotation_relative_to(vector, reference) == vector
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