#[derive(Debug, Clone)]
pub enum FilletRadiusLaw {
Constant(f64),
Linear {
start: f64,
end: f64,
},
SCurve {
start: f64,
end: f64,
},
}
impl FilletRadiusLaw {
#[must_use]
pub fn evaluate(&self, t: f64) -> f64 {
let t = t.clamp(0.0, 1.0);
match self {
Self::Constant(r) => *r,
Self::Linear { start, end } => (end - start).mul_add(t, *start),
Self::SCurve { start, end } => {
let s = t * t * (-2.0f64).mul_add(t, 3.0);
(end - start).mul_add(s, *start)
}
}
}
}