示例#1
0
def test_square_by_radius():
    corners = list(ngon(4, radius=1))
    assert len(corners) == 4
    assert is_close_points(corners[0], (1, 0, 0))
    assert is_close_points(corners[1], (0, 1, 0))
    assert is_close_points(corners[2], (-1, 0, 0))
    assert is_close_points(corners[3], (0, -1, 0))
示例#2
0
def test_spline_interpolation():
    vertices = [(0., 0.), (1., 2.), (3., 1.), (5., 3.)]
    result = spline_interpolation(vertices, method='uniform', subdivide=4)
    assert len(result) == 13  # (len-1) * subdivide + 1
    assert is_close_points((0, 0, 0), result[0]), 'expected start point'
    assert is_close_points((5, 3, 0), result[-1]), 'expected end point'
    assert is_close_points((1, 2, 0), result[4]), 'expected 2. fit point'
    assert is_close_points((3, 1, 0), result[8]), 'expected 3. fit point'
        def check_intersection(m, p1, p2, abs_tol=1e-4):
            p1 = Vec2(p1)
            p2 = Vec2(p2)
            circle2 = ConstructionCircle(m, 1.5)
            points = circle1.intersect_circle(circle2, abs_tol=abs_tol)
            self.assertEqual(len(points), 2)
            a, b = points

            result1 = is_close_points(a, p1, abs_tol=abs_tol) and is_close_points(b, p2, abs_tol=abs_tol)
            result2 = is_close_points(a, p2, abs_tol=abs_tol) and is_close_points(b, p1, abs_tol=abs_tol)
            return result1 or result2
示例#4
0
文件: forms.py 项目: yening2020/ezdxf
def close_polygon(vertices: Iterable['Vertex']) -> List['Vertex']:
    """ Returns list of vertices, where vertices[0] == vertices[-1].
    """
    vertices = list(vertices)
    if not is_close_points(vertices[0], vertices[-1]):
        vertices.append(vertices[0])
    return vertices
示例#5
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)
示例#6
0
def test_heptagon_by_edge_length():
    corners = list(ngon(7, length=10))
    assert len(corners) == 7
    assert is_close_points(corners[0], (11.523824354812433, 0, 0))
    assert is_close_points(corners[1], (7.184986963636852, 9.009688679024192, 0))
    assert is_close_points(corners[2], (-2.564292158181384, 11.234898018587335, 0))
    assert is_close_points(corners[3], (-10.382606982861683, 5, 0))
    assert is_close_points(corners[4], (-10.382606982861683, -5, 0))
    assert is_close_points(corners[5], (-2.564292158181387, -11.234898018587335, 0))
    assert is_close_points(corners[6], (7.18498696363685, -9.009688679024192, 0))
示例#7
0
def test_rotate():
    p = [(1, 0, 3), (0, 1, 6)]
    r = list(rotate(p, 90, deg=True))
    assert is_close_points(r[0], (0, 1, 3))
    assert is_close_points(r[1], (-1, 0, 6))
示例#8
0
def test_scale():
    p = [(1, 2, 3), (4, 5, 6)]
    r = list(scale(p, (3, 2, 1)))
    assert is_close_points(r[0], (3, 4, 3))
    assert is_close_points(r[1], (12, 10, 6))
示例#9
0
def test_translate():
    p = [(1, 2, 3), (4, 5, 6)]
    r = list(translate(p, (3, 2, 1)))
    assert is_close_points(r[0], (4, 4, 4))
    assert is_close_points(r[1], (7, 7, 7))
示例#10
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))
示例#11
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)
示例#12
0
def test_intersect_ray_intersect():
    circle = ConstructionCircle((10., 10.), 3)
    ray_vert = ConstructionRay((8.5, 10.), angle=HALF_PI)
    cross_points = circle.intersect_ray(ray_vert)
    assert len(cross_points) == 2
    p1, p2 = cross_points
    if p1[1] > p2[1]: p1, p2 = p2, p1
    assert is_close_points(p1, (8.5, 7.4019), abs_tol=1e-4) is True
    assert is_close_points(p2, (8.5, 12.5981), abs_tol=1e-4) is True

    ray_hor = ConstructionRay((10, 8.5), angle=0.)
    cross_points = circle.intersect_ray(ray_hor)
    assert len(cross_points) == 2
    p1, p2 = cross_points
    if p1[0] > p2[0]: p1, p2 = p2, p1
    assert is_close_points(p1, (7.4019, 8.5), abs_tol=1e-4) is True
    assert is_close_points(p2, (12.5981, 8.5), abs_tol=1e-4) is True

    ray_slope = ConstructionRay((5, 5), (16, 12))
    cross_points = circle.intersect_ray(ray_slope)
    assert len(cross_points) == 2
    p1, p2 = cross_points
    if p1[0] > p2[0]: p1, p2 = p2, p1
    assert is_close_points(p1, (8.64840, 7.3217), abs_tol=1e-4) is True
    assert is_close_points(p2, (12.9986, 10.0900), abs_tol=1e-4) is True

    # ray with slope through midpoint
    ray_slope = ConstructionRay((10, 10), angle=HALF_PI / 2)
    cross_points = circle.intersect_ray(ray_slope)
    assert len(cross_points) == 2
    p1, p2 = cross_points
    if p1[0] > p2[0]: p1, p2 = p2, p1
    # print (p1[0], p1[1], p2[0], p2[1])
    assert is_close_points(p1, (7.8787, 7.8787), abs_tol=1e-4) is True
    assert is_close_points(p2, (12.1213, 12.1213), abs_tol=1e-4) is True

    # horizontal ray through midpoint
    ray_hor = ConstructionRay((10, 10), angle=0)
    cross_points = circle.intersect_ray(ray_hor)
    assert len(cross_points) == 2
    p1, p2 = cross_points
    if p1[0] > p2[0]: p1, p2 = p2, p1
    # print (p1[0], p1[1], p2[0], p2[1])
    assert is_close_points(p1, (7, 10), abs_tol=1e-5) is True
    assert is_close_points(p2, (13, 10), abs_tol=1e-5) is True

    # vertical ray through midpoint
    ray_vert = ConstructionRay((10, 10), angle=HALF_PI)
    cross_points = circle.intersect_ray(ray_vert)
    assert len(cross_points) == 2
    p1, p2 = cross_points
    if p1[1] > p2[1]: p1, p2 = p2, p1
    # print (p1[0], p1[1], p2[0], p2[1])
    assert is_close_points(p1, (10, 7), abs_tol=1e-5) is True
    assert is_close_points(p2, (10, 13), abs_tol=1e-5) is True
示例#13
0
 def check_touch(m, t, abs_tol=1e-9):
     circle2 = ConstructionCircle(m, 1.5)
     points = circle1.intersect_circle(circle2, 4)
     assert len(points) == 1
     return is_close_points(points[0], Vec2(t), abs_tol=abs_tol)