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}