use super::helpers::clamp;
#[inline]
pub fn sdf_union(a: f64, b: f64) -> f64 {
a.min(b)
}
#[inline]
pub fn sdf_intersection(a: f64, b: f64) -> f64 {
a.max(b)
}
#[inline]
pub fn sdf_difference(a: f64, b: f64) -> f64 {
a.max(-b)
}
pub fn sdf_smooth_union(a: f64, b: f64, k: f64) -> f64 {
let h = clamp(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);
a * h + b * (1.0 - h) - k * h * (1.0 - h)
}
pub fn sdf_smooth_intersection(a: f64, b: f64, k: f64) -> f64 {
let h = clamp(0.5 - 0.5 * (b - a) / k, 0.0, 1.0);
a * h + b * (1.0 - h) + k * h * (1.0 - h)
}
pub fn sdf_smooth_difference(a: f64, b: f64, k: f64) -> f64 {
let h = clamp(0.5 - 0.5 * (b + a) / k, 0.0, 1.0);
a * h + (-b) * (1.0 - h) + k * h * (1.0 - h)
}
pub fn sdf_exp_smooth_union(a: f64, b: f64, k: f64) -> f64 {
let ea = (-k * a).exp();
let eb = (-k * b).exp();
-(ea + eb).ln() / k
}