fit_circle_3d — 3D geometry op

• Data kinds: points → primitive

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

Usage

Point set → a 3-D circle (fit the plane, then fit a 2-D circle within it). Returns (center, radius, normal).

Gets the plane (c, n) with fit_plane_3d, projects the points onto an orthonormal in-plane basis (e1, e2), solves a 2-D algebraic circle fit (lstsq of |q|² = 2·cc·q + k) and maps the centre back to 3-D. For (N,3), fewer than 3 points raise ValueError (with 3 points the plane is exact and the circle passes through the 3 points). center is a 3-D point on the plane, radius a float (a negative root is clamped to 0), normal the plane's unit normal (arbitrary sign). If only part of the arc is present or many points are off the plane, the radius is biased (a property of algebraic fits; the in-plane residual is not returned).

Uses: centre and diameter of holes, flanges and rings; eccentricity from an axis with distance_point_line.

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