def test_intersect_ray_pass():
    circle = ConstructionCircle((10.0, 10.0), 3)
    ray1_hor = ConstructionRay((10.0, 15.0), angle=0)
    ray2_hor = ConstructionRay((10.0, 5.0), angle=0)
    ray1_vert = ConstructionRay((5.0, 10.0), angle=HALF_PI)
    ray2_vert = ConstructionRay((15.0, 10.0), angle=-HALF_PI)
    ray3 = ConstructionRay((13.24, 14.95), angle=0.3992)
    assert len(circle.intersect_ray(ray1_hor)) == 0
    assert len(circle.intersect_ray(ray2_hor)) == 0
    assert len(circle.intersect_ray(ray1_vert)) == 0
    assert len(circle.intersect_ray(ray2_vert)) == 0
    assert len(circle.intersect_ray(ray3)) == 0
예제 #2
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