oxiphysics_geometry/implicit_geometry/
sdfellipsoid_traits.rs1#[allow(unused_imports)]
12use super::functions::*;
13#[allow(unused_imports)]
14use super::functions::*;
15use super::types::SdfEllipsoid;
16
17impl Sdf for SdfEllipsoid {
18 fn dist(&self, p: [f64; 3]) -> f64 {
19 let [rx, ry, rz] = self.radii;
20 let k0 = len([p[0] / rx, p[1] / ry, p[2] / rz]);
21 let k1 = len([p[0] / (rx * rx), p[1] / (ry * ry), p[2] / (rz * rz)]);
22 if k0 < 1e-14 {
23 return -(rx.min(ry).min(rz));
24 }
25 k0 * (k0 - 1.0) / k1
26 }
27}