Skip to main content

oxiphysics_geometry/implicit_geometry/
sdfellipsoid_traits.rs

1//! # SdfEllipsoid - Trait Implementations
2//!
3//! This module contains trait implementations for `SdfEllipsoid`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Sdf`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::functions::*;
12use super::types::SdfEllipsoid;
13
14impl Sdf for SdfEllipsoid {
15    fn dist(&self, p: [f64; 3]) -> f64 {
16        let [rx, ry, rz] = self.radii;
17        let k0 = len([p[0] / rx, p[1] / ry, p[2] / rz]);
18        let k1 = len([p[0] / (rx * rx), p[1] / (ry * ry), p[2] / (rz * rz)]);
19        if k0 < 1e-14 {
20            return -(rx.min(ry).min(rz));
21        }
22        k0 * (k0 - 1.0) / k1
23    }
24}