skspatial.objects.Plane.best_fit¶
- classmethod Plane.best_fit(points: Union[ndarray, Sequence], tol: Optional[float] = None, **kwargs) Plane [source]¶
Return the plane of best fit for a set of 3D points.
- Parameters
- pointsarray_like
Input 3D points.
- tolfloat | None, optional
Keyword passed to
Points.are_collinear()
(default None).- kwargsdict, optional
Additional keywords passed to
numpy.linalg.svd()
- Returns
- Plane
The plane of best fit.
- Raises
- ValueError
If the points are collinear or are not 3D.
References
Using SVD for some fitting problems Inge Söderkvist Algorithm 3.1 https://www.ltu.se/cms_fs/1.51590!/svd-fitting.pdf
Examples
>>> from skspatial.objects import Plane
>>> points = [[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]] >>> plane = Plane.best_fit(points)
The point on the plane is the centroid of the points.
>>> plane.point Point([0.25, 0.25, 0.25])
The plane normal is a unit vector.
>>> plane.normal.round(3) Vector([-0.577, -0.577, -0.577])
>>> points = [[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0]]
>>> Plane.best_fit(points) Plane(point=Point([0.5, 0.5, 0. ]), normal=Vector([0., 0., 1.]))
>>> Plane.best_fit(points, full_matrices=False) Plane(point=Point([0.5, 0.5, 0. ]), normal=Vector([0., 0., 1.]))