Esempio n. 1
0
def test_as_bspline():
    spiral = EulerSpiral(2.0)
    spline = spiral.bspline(5, 10)
    assert spline.degree == 3
    assert spline.max_t == 5
    results = spline.approximate(10)
    for expected, result in zip(expected_points, results):
        assert is_close_points(Vec3(expected), result)
Esempio n. 2
0
def euler_spiral(
    count: int, length: float = 1, curvature: float = 1, elevation: float = 0
) -> Iterable[Vec3]:
    """Create polygon vertices for an `euler spiral <https://en.wikipedia.org/wiki/Euler_spiral>`_
    of a given `length` and radius of curvature. This is a parametric curve,
    which always starts at the origin (0, 0).

    Args:
        count: count of polygon vertices
        length: length of curve in drawing units
        curvature: radius of curvature
        elevation: z-axis for all vertices

    Returns:
        vertices as :class:`~ezdxf.math.Vec3` objects

    """
    spiral = EulerSpiral(curvature=curvature)
    for vertex in spiral.approximate(length, count - 1):
        yield vertex.replace(z=elevation)
Esempio n. 3
0
def test_circle_midpoint():
    spiral = EulerSpiral(2.0)
    m = spiral.circle_center(2.0)
    assert is_close_points(m, (0.9917242992178723, 2.082593218533209, 0))
Esempio n. 4
0
def test_distance():
    spiral = EulerSpiral(2.0)
    assert isclose(spiral.distance(10), 0.4)
Esempio n. 5
0
def test_tangent():
    spiral = EulerSpiral(2.0)
    assert isclose(spiral.tangent(1).angle, 0.125)
Esempio n. 6
0
def test_radius():
    spiral = EulerSpiral(2.0)
    assert isclose(spiral.radius(1), 4.)
    assert isclose(spiral.radius(0), 0.)
Esempio n. 7
0
def test_approximate():
    spiral = EulerSpiral(2.0)
    results = spiral.approximate(5, 10)
    for expected, result in zip(expected_points, results):
        assert is_close_points(Vec3(expected), result)