def subdiv(s: Vec3, e: Vec3, s_param: float, e_param: float): m_param = (s_param + e_param) * 0.5 m = vertex_(m_param) d = distance_point_line_3d(m, s, e) if d < distance: yield e else: yield from subdiv(s, m, s_param, m_param) yield from subdiv(m, e, m_param, e_param)
def test_distance_point_line_3d(points, expected): p, a, b = Vec3.generate(points) assert distance_point_line_3d(p, a, b) == pytest.approx(expected)
def test_distance_point_line_3d_no_line(x): """Start point is equal or close to end point.""" s = Vec3(1, 0, x) e = Vec3(1, 0, x) with pytest.raises(ZeroDivisionError): distance_point_line_3d(Vec3(1, 0, 0), s, e)