예제 #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(Vector(expected), result)
예제 #2
0
파일: forms.py 프로젝트: tbwhsb88/ezdxf
def euler_spiral(count: int, length: float = 1, curvature: float = 1, elevation: float = 0) -> Iterable[Vector]:
    """
    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.Vector` objects

    """
    spiral = EulerSpiral(curvature=curvature)
    for vertex in spiral.approximate(length, count - 1):
        yield vertex.replace(z=elevation)
예제 #3
0
def euler_spiral(count: int,
                 length: float = 1,
                 curvature: float = 1,
                 elevation: float = 0) -> Iterable[Vector]:
    """
    Create polygon vertices for an euler spiral of a given length and
    radius of curvature. This is a parametric curve, which always starts
    at the origin.

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

    Returns: yields Vector() objects

    """
    spiral = EulerSpiral(curvature=curvature)
    for vertex in spiral.approximate(length, count - 1):
        yield vertex.replace(z=elevation)
예제 #4
0
def test_circle_midpoint():
    spiral = EulerSpiral(2.0)
    m = spiral.circle_midpoint(2.0)
    assert is_close_points(m, (0.9917242992178723, 2.082593218533209, 0))
예제 #5
0
def test_distance():
    spiral = EulerSpiral(2.0)
    assert isclose(spiral.distance(10), 0.4)
예제 #6
0
def test_tangent():
    spiral = EulerSpiral(2.0)
    assert isclose(spiral.tangent(1).angle, 0.125)
예제 #7
0
def test_radius():
    spiral = EulerSpiral(2.0)
    assert isclose(spiral.radius(1), 4.)
    assert isclose(spiral.radius(0), 0.)
예제 #8
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(Vector(expected), result)