Skip to main content

Crate ogeom_intersect

Crate ogeom_intersect 

Source
Expand description

Intersection: where curves and surfaces meet.

Elsewhere: IntPatch, GeomInt, IntAna, IntCurve, IntCurveSurface, IntWalk, IntSurf, ApproxInt and Extrema.

The entry points, by what is being intersected:

  • intersect_surfaces: surface/surface, the one ogeom-bool builds on. Analytic closed forms where they exist, with exact same-parameter pcurves; the marching-and-fitting pipeline where they do not, with the tolerance reported as a sum of stated parts.
  • intersect_curves_2d / intersect_curves: curve/curve in the plane and in space. The planar one is what boolean face splitting runs on; the spatial one reports the gap each crossing achieved, because space curves generically miss.
  • intersect_curve_surface: curve/surface, the well-posed system, and what the point-in-solid classifier casts its rays with.

The stages underneath are public because each is separately measurable: surface_surface (the closed forms), seeds/trace/branches (the marcher), trace_tangential (a contact, where the surfaces touch along a curve without crossing), approximate_branch (polyline to curves).

§The instruments

The crate is held to instruments rather than trusted. They live in tests/support/, because measuring an intersector is not something a caller of one wants to do. What a caller wants is an intersector that has been measured.

One scores accuracy: every point of every reported curve against both surfaces, with ground truth being the surfaces themselves rather than anyone else’s answer. The other scores completeness: the surfaces are asked, by signed distance and the intermediate value theorem, where the intersection must be, and every such cell had better be reached by some branch. The second exists because the first cannot catch a missing answer: an intersector that finds one circle of two and traces it perfectly scores perfectly on accuracy alone. Both have negative controls in tests/instruments.rs. They demonstrably fail when something is genuinely missing.

Re-exports§

pub use approx::IntersectionCurve;
pub use approx::approximate_branch;
pub use contact::trace_tangential;
pub use curve_surface::CurveSurfaceIntersection;
pub use curve_surface::CurveSurfaceOptions;
pub use curve_surface::Piercing;
pub use curve_surface::intersect_curve_surface;
pub use curves::Crossing;
pub use curves::CurveCurveOptions;
pub use curves::CurveIntersection;
pub use curves::Overlap;
pub use curves::intersect_curves;
pub use curves::intersect_curves_2d;
pub use extrema::Approach;
pub use extrema::Extrema;
pub use extrema::ExtremaOptions;
pub use extrema::extrema_curve_curve;
pub use extrema::extrema_curve_surface;
pub use extrema::extrema_surface_surface;
pub use march::Contact;
pub use march::Marching;
pub use march::Stopped;
pub use march::Traced;
pub use march::branches;
pub use march::seeds;
pub use march::trace;
pub use section::IntersectOptions;
pub use section::SectionCurve;
pub use section::SurfaceIntersection;
pub use section::exact_pcurve_of;
pub use section::exact_pcurve_over;
pub use section::intersect_surfaces;
pub use surface::Meeting;
pub use surface::surface_surface;
pub use walk::Condition;
pub use walk::Walked;
pub use walk::follow;
pub use walk::walk_one_way;

Modules§

approx
The approximation stage: a traced branch becomes curves.
contact
Tangential contact: two surfaces that touch along a curve without crossing it.
curve_surface
Where a curve pierces a surface.
curves
Where two curves meet, in the plane and in space.
extrema
The stationary approaches between two geometries.
march
The general surface/surface intersector: seed, then walk.
section
Where two surfaces meet: the one call.
surface
Surface/surface intersection: the analytic cases.
walk
One walker, several conditions.