pub struct RadiusLaw { /* private fields */ }Expand description
A composable radius law over cumulative abscissa [0, total_length].
Construction validates every input (refuse-or-exact: non-positive radii, non-positive lengths, and non-monotone interpolation abscissas are named errors); a constructed law is deterministic and cheap to evaluate.
Implementations§
Source§impl RadiusLaw
impl RadiusLaw
Sourcepub fn constant(length: f64, radius: f64) -> Result<Self, String>
pub fn constant(length: f64, radius: f64) -> Result<Self, String>
A constant law: radius everywhere on [0, length].
Sourcepub fn from_vertex_radii(
edge_lengths: &[f64],
vertex_radii: &[f64],
) -> Result<Self, String>
pub fn from_vertex_radii( edge_lengths: &[f64], vertex_radii: &[f64], ) -> Result<Self, String>
The per-vertex chain model: radius vertex_radii[i] at chain vertex
i, smoothly interpolated along the chain. edge_lengths[k] is the
arc length of chain edge k, so the abscissa breakpoints sit at the
chain’s edge junctions; vertex_radii needs exactly one entry per
vertex (edge_lengths.len() + 1). Interpolation is monotone C1
(PCHIP): every vertex radius is met exactly and the law never
overshoots the given radii.
Sourcepub fn from_segments(segments: &[LawSegment]) -> Result<Self, String>
pub fn from_segments(segments: &[LawSegment]) -> Result<Self, String>
Compose a law from consecutive segments with smooth junction transitions (see the module docs for the transition model).
Sourcepub fn total_length(&self) -> f64
pub fn total_length(&self) -> f64
Total abscissa length of the law’s domain.
Sourcepub fn radius_at(&self, s: f64) -> f64
pub fn radius_at(&self, s: f64) -> f64
Evaluate the radius at abscissa s (clamped into [0, total_length]).
Sourcepub fn radius_at_fraction(&self, fraction: f64) -> f64
pub fn radius_at_fraction(&self, fraction: f64) -> f64
Evaluate at normalized abscissa fraction ∈ [0, 1] of the domain.
Sourcepub fn max_second_derivative(&self, s_a: f64, s_b: f64) -> f64
pub fn max_second_derivative(&self, s_a: f64, s_b: f64) -> f64
Upper bound of |d²radius/ds²| over [s_a, s_b], used by callers to
derive a sampling density from the law’s curvature (piecewise-linear
interpolation error of a C1, piecewise-C2 function over step h is at
most h²·max|r''|/8). Per piece the bound is exact-family: the second
derivative of a degree ≤ 5 piece is a cubic, and the maximum absolute
value of a polynomial is bounded by the maximum absolute Bernstein
coefficient (convex-hull property). Pieces partially overlapping the
query span use their whole-piece bound (conservative).