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)
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)
def test_circle_midpoint(): spiral = EulerSpiral(2.0) m = spiral.circle_center(2.0) assert is_close_points(m, (0.9917242992178723, 2.082593218533209, 0))
def test_distance(): spiral = EulerSpiral(2.0) assert isclose(spiral.distance(10), 0.4)
def test_tangent(): spiral = EulerSpiral(2.0) assert isclose(spiral.tangent(1).angle, 0.125)
def test_radius(): spiral = EulerSpiral(2.0) assert isclose(spiral.radius(1), 4.) assert isclose(spiral.radius(0), 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)