def plane_fit(points, tolerance=None):
'''
Given a set of points, find an origin and normal using least squares
Arguments
---------
points: (n,3)
tolerance: how non-planar the result can be without raising an error
Returns
---------
C: (3) point on the plane
N: (3) normal vector
'''
C = points[0]
x = points - C
M = np.dot(x.T, x)
N = np.linalg.svd(M)[0][:,-1]
if not (tolerance is None):
normal_range = np.ptp(np.dot(N, points.T))
if normal_range > tol.planar:
log.error('Points have peak to peak of %f', normal_range)
raise ValueError('Plane outside tolerance!')
return C, N
评论列表
文章目录