plane_from_3points — 3D geometry op

• Data kinds: points → primitive

• Call: import fullseye as fs; fs.ledger.plane_from_3points(a, b, c) (to call the implementation directly, import match3d; match3d.plane_from_3points(a, b, c); from the registry, ops3d.get("plane_from_3points"))

Usage

Three points → a plane (a point on it and a unit normal). Three coordinates fix the plane (2-D and 3-D alike).

Returns (a, n): a is point 1, n is n = (b−a)×(c−a) normalised (its direction follows the right-hand screw of a→b→c). The arguments are numeric 2- or 3-vectors (anything else, or mixed dimensions, raises ValueError). If the 3 points are collinear, n is returned as the zero vector (no exception). If 2-dimensional points are passed, np.cross returns a scalar (2 times the signed area), so n is not a vector but a scalar ±1. If you need the normal of a line in 2-D, rotate the direction of line_from_2points by 90° and use that.

Downstream: pass this (a, n) to distance_point_plane / intersect_line_plane / intersect_planes / angle_between_planes. From a point cloud, use fit_plane_3d.

References (sample data, literature)

• 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.

Runnable examples (verified samples that actually call this op)

• geometry_metrology — py -3.11 examples_3d/geometry_metrology.py

Ops the type connects to (they accept 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

Same category (geometry)

line_from_2points · angle_3points · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line · distance_line_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.