1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
# Copyright (c) 2010-2021, Manfred Moitzi
# License: MIT License
from ezdxf.math import Vec3, EulerSpiral
from math import isclose
expected_points = [
(0.0, 0.0),
(0.4999511740825297, 0.0052079700401204106),
(0.99843862987320509, 0.041620186803547267),
(1.4881781381789292, 0.13983245006538086),
(1.9505753764262783, 0.32742809475246343),
(2.3516635639763064, 0.62320387651494735),
(2.6419212729287223, 1.0273042715153904),
(2.7637635905799862, 1.5086926753401932),
(2.6704397998515645, 1.9952561538526452),
(2.3566156629790327, 2.3766072153088964),
(1.8936094203448928, 2.5322897289776636),
]
def test_approximate():
spiral = EulerSpiral(2.0)
results = spiral.approximate(5, 10)
for expected, result in zip(expected_points, results):
assert Vec3(expected).isclose(result)
def test_radius():
spiral = EulerSpiral(2.0)
assert isclose(spiral.radius(1), 4.0)
assert isclose(spiral.radius(0), 0.0)
def test_tangent():
spiral = EulerSpiral(2.0)
assert isclose(spiral.tangent(1).angle, 0.125)
def test_distance():
spiral = EulerSpiral(2.0)
assert isclose(spiral.distance(10), 0.4)
def test_circle_midpoint():
spiral = EulerSpiral(2.0)
m = spiral.circle_center(2.0)
assert m.isclose((0.9917242992178723, 2.082593218533209, 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 Vec3(expected).isclose(result)
|