geometry op• Data kinds: points → primitive
• Call: import fullseye as fs; fs.ledger.fit_plane_3d(points) (to call the implementation directly, import match3d; match3d.fit_plane_3d(points); from the registry, ops3d.get("fit_plane_3d"))
Point set → a least-squares plane (through the centroid, normal = the smallest principal axis, plus the RMS residual). Returns (point, normal, resid).
Takes the centroid c of an (N,3) point cloud (ValueError if not 3 columns or fewer than 3 points) and uses the eigenvector of the smallest eigenvalue of the scatter matrix as the normal (minimises the sum of squared orthogonal distances; resid = sqrt(λ_min/N) = RMS of the orthogonal distance from the plane). normal is a unit vector with an arbitrary sign (to make it point outward, flip it according to the viewpoint or the centroid). With 3 points the plane passes through them exactly and resid=0 (negative BLAS rounding is clamped to 0). If the points are collinear (the 2nd eigenvalue is also 0) the normal is undefined. Sensitive to outliers (take the inliers first with ransac_plane / plane_segmentation). 3-D only.
Downstream: distance_point_plane / angle_between_planes / intersect_planes; for the flatness of a height field, surface_form_error(degree=1).
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• geometry_metrology — py -3.11 examples_3d/geometry_metrology.py
primitive as input)fuse_to_voxel · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line · distance_line_line · distance_segment_segment
geometry)line_from_2points · plane_from_3points · angle_3points · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line
*Provenance: match3d.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.