Skip to main content

brepkit_geometry/extrema/
mod.rs

1//! Distance and extrema computation between geometry primitives.
2//!
3//! # Result types
4//!
5//! - [`ExtremaSolution`] — general closest-point result between two entities.
6//! - [`CurveProjection`] — closest point on a curve from a query point.
7//! - [`SurfaceProjection`] — closest point on a surface from a query point.
8//!
9//! # Algorithms
10//!
11//! - [`point_curve`] — point-to-curve projection (analytic fast paths + generic
12//!   Newton-Raphson fallback).
13//! - [`point_surface`] — point-to-surface projection (analytic fast paths + generic
14//!   Newton-Raphson fallback).
15//! - [`curve_curve`] — curve-to-curve minimum distance (analytic `line_to_line` +
16//!   generic sampler/Newton-Raphson).
17//! - [`lipschitz`] — Lipschitz global optimizer and NURBS curve-to-curve distance.
18//! - [`segment`] — segment-to-segment minimum distance.
19
20pub mod curve_curve;
21pub mod lipschitz;
22pub mod point_curve;
23pub mod point_surface;
24pub mod segment;
25
26pub use curve_curve::{curve_to_curve, line_to_line};
27pub use lipschitz::{estimate_curve_curve_lipschitz, nurbs_curve_curve_distance};
28pub use point_curve::{point_to_circle, point_to_curve, point_to_line};
29pub use point_surface::{
30    point_to_cone, point_to_cylinder, point_to_nurbs_surface, point_to_plane, point_to_sphere,
31    point_to_surface, point_to_torus,
32};
33pub use segment::segment_segment_distance;
34
35use brepkit_math::vec::Point3;
36
37/// Result of a distance/extrema computation between two geometric entities.
38#[derive(Debug, Clone, Copy)]
39pub struct ExtremaSolution {
40    /// Minimum distance found.
41    pub distance: f64,
42    /// Closest point on entity A.
43    pub point_a: Point3,
44    /// Closest point on entity B.
45    pub point_b: Point3,
46    /// Parameter on entity A at closest point.
47    pub param_a: f64,
48    /// Parameter on entity B at closest point.
49    pub param_b: f64,
50}
51
52/// Result of projecting a point onto a curve.
53#[derive(Debug, Clone, Copy)]
54pub struct CurveProjection {
55    /// Distance from point to closest point on curve.
56    pub distance: f64,
57    /// Closest point on the curve.
58    pub point: Point3,
59    /// Parameter value at closest point.
60    pub parameter: f64,
61}
62
63/// Result of projecting a point onto a surface.
64#[derive(Debug, Clone, Copy)]
65pub struct SurfaceProjection {
66    /// Distance from point to closest point on surface.
67    pub distance: f64,
68    /// Closest point on the surface.
69    pub point: Point3,
70    /// U parameter at closest point.
71    pub u: f64,
72    /// V parameter at closest point.
73    pub v: f64,
74}