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
11#[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}