pub struct Sphere {
pub radius: Real,
}Expand description
A sphere defined by its radius.
Fields§
§radius: RealRadius of the sphere.
Implementations§
Source§impl Sphere
impl Sphere
Sourcepub fn surface_area(&self) -> Real
pub fn surface_area(&self) -> Real
Surface area: 4πr².
Sourcepub fn volume_explicit(&self) -> Real
pub fn volume_explicit(&self) -> Real
Volume: (4/3)πr³.
Sourcepub fn inertia_tensor_array(&self, mass: f64) -> [[f64; 3]; 3]
pub fn inertia_tensor_array(&self, mass: f64) -> [[f64; 3]; 3]
Inertia tensor as [[f64;3\];3] row-major: (2/5)mr² × identity.
Sourcepub fn ray_cast_array(
&self,
origin: [f64; 3],
direction: [f64; 3],
max_toi: f64,
) -> Option<(f64, [f64; 3])>
pub fn ray_cast_array( &self, origin: [f64; 3], direction: [f64; 3], max_toi: f64, ) -> Option<(f64, [f64; 3])>
Ray cast returning (t, normal) as plain arrays.
Sourcepub fn closest_point(&self, p: [f64; 3]) -> [f64; 3]
pub fn closest_point(&self, p: [f64; 3]) -> [f64; 3]
Closest point on the sphere surface to p.
If p is the origin, returns a point on the +X side.
Sourcepub fn support(&self, direction: [f64; 3]) -> [f64; 3]
pub fn support(&self, direction: [f64; 3]) -> [f64; 3]
GJK support function: farthest point in direction.
Sourcepub fn support_with_center(
&self,
center: [f64; 3],
direction: [f64; 3],
) -> [f64; 3]
pub fn support_with_center( &self, center: [f64; 3], direction: [f64; 3], ) -> [f64; 3]
GJK support point with a center offset.
Returns center + radius * normalize(direction).
Sourcepub fn minkowski_sum_support(
&self,
other: &Sphere,
direction: [f64; 3],
) -> [f64; 3]
pub fn minkowski_sum_support( &self, other: &Sphere, direction: [f64; 3], ) -> [f64; 3]
Minkowski sum support: support(A) + support(B) in the given direction. Both spheres are centered at the origin.
Sourcepub fn minkowski_diff_support(
&self,
other: &Sphere,
direction: [f64; 3],
) -> [f64; 3]
pub fn minkowski_diff_support( &self, other: &Sphere, direction: [f64; 3], ) -> [f64; 3]
Minkowski difference support: support_A(d) - support_B(-d). Both spheres centered at origin.
Sourcepub fn bounding_sphere_from_points(points: &[[f64; 3]]) -> ([f64; 3], f64)
pub fn bounding_sphere_from_points(points: &[[f64; 3]]) -> ([f64; 3], f64)
Compute bounding sphere from a set of points (Ritter’s algorithm).
Returns (center, radius).
Sourcepub fn intersects_sphere(
&self,
center_a: [f64; 3],
other: &Sphere,
center_b: [f64; 3],
) -> bool
pub fn intersects_sphere( &self, center_a: [f64; 3], other: &Sphere, center_b: [f64; 3], ) -> bool
Sphere-sphere intersection test. Returns true if two spheres (at given centers) overlap.
Sourcepub fn sphere_intersection_circle(
&self,
center_a: [f64; 3],
other: &Sphere,
center_b: [f64; 3],
) -> Option<([f64; 3], [f64; 3], f64)>
pub fn sphere_intersection_circle( &self, center_a: [f64; 3], other: &Sphere, center_b: [f64; 3], ) -> Option<([f64; 3], [f64; 3], f64)>
Sphere-sphere intersection circle.
Returns Some((center, normal, circle_radius)) if the spheres intersect
in a circle, None if they don’t intersect or are concentric.
Sourcepub fn closest_point_to_line(
&self,
line_point: [f64; 3],
line_dir: [f64; 3],
) -> [f64; 3]
pub fn closest_point_to_line( &self, line_point: [f64; 3], line_dir: [f64; 3], ) -> [f64; 3]
Closest point on the sphere surface to a line defined by point and direction.
Returns the closest point on the sphere surface.
Sourcepub fn closest_point_to_plane(&self, normal: [f64; 3], d: f64) -> [f64; 3]
pub fn closest_point_to_plane(&self, normal: [f64; 3], d: f64) -> [f64; 3]
Closest point on the sphere surface to a plane defined by normal (unit) and d
where normal · x = d.
Sourcepub fn sphere_sweep(
&self,
start: [f64; 3],
velocity: [f64; 3],
target_center: [f64; 3],
target_radius: f64,
max_t: f64,
) -> Option<f64>
pub fn sphere_sweep( &self, start: [f64; 3], velocity: [f64; 3], target_center: [f64; 3], target_radius: f64, max_t: f64, ) -> Option<f64>
Sphere sweep (moving sphere): test if a sphere moving from start along
velocity hits a static sphere (centered at target_center with target_radius).
Returns Some(t) in [0, max_t] if there is a collision.
Sourcepub fn signed_distance(&self, p: [f64; 3]) -> f64
pub fn signed_distance(&self, p: [f64; 3]) -> f64
Signed distance from a point to the sphere surface. Negative if inside the sphere, positive if outside.
Sourcepub fn contains_point(&self, p: [f64; 3]) -> bool
pub fn contains_point(&self, p: [f64; 3]) -> bool
Returns true if the point is inside (or on) the sphere.
Sourcepub fn project_inside(&self, p: [f64; 3]) -> [f64; 3]
pub fn project_inside(&self, p: [f64; 3]) -> [f64; 3]
Project a point onto the sphere interior (clamp to sphere if outside).
Sourcepub fn geodesic_icosphere(
&self,
subdivisions: u32,
) -> (Vec<[f64; 3]>, Vec<[usize; 3]>)
pub fn geodesic_icosphere( &self, subdivisions: u32, ) -> (Vec<[f64; 3]>, Vec<[usize; 3]>)
Generate a geodesic icosphere by subdividing an icosahedron.
Returns (vertices, triangles) where each vertex is a unit-sphere
point scaled to self.radius, and triangles are [usize; 3] index triples.
subdivisions = 0 gives the base icosahedron (20 faces, 12 verts).
Sourcepub fn spherical_cap_volume(&self, h: f64) -> f64
pub fn spherical_cap_volume(&self, h: f64) -> f64
Spherical cap volume.
Returns the volume of a spherical cap of height h cut from this sphere.
h must be in [0, 2r].
Sourcepub fn spherical_cap_area(&self, h: f64) -> f64
pub fn spherical_cap_area(&self, h: f64) -> f64
Spherical cap surface area (curved part only).
Area = 2π r h.
Sourcepub fn spherical_zone_area(&self, h1: f64, h2: f64) -> f64
pub fn spherical_zone_area(&self, h1: f64, h2: f64) -> f64
Spherical zone area between two parallel planes.
For planes at heights h1 and h2 (measured from the bottom of the
sphere), returns the surface area of the zone.
Area = 2π r |h2 - h1|.
Sourcepub fn hemisphere_cosine_sample(&self, n: usize, seed: u64) -> Vec<[f64; 3]>
pub fn hemisphere_cosine_sample(&self, n: usize, seed: u64) -> Vec<[f64; 3]>
Sample points on the hemisphere (z ≥ 0) using cosine-weighted sampling.
Uses a deterministic xorshift PRNG seeded with seed.
Each point lies on the unit hemisphere surface projected to self.radius.
Sourcepub fn hemisphere_uniform_sample(&self, n: usize, seed: u64) -> Vec<[f64; 3]>
pub fn hemisphere_uniform_sample(&self, n: usize, seed: u64) -> Vec<[f64; 3]>
Uniform hemisphere sampling (z ≥ 0).
Each sample is uniformly distributed on the upper hemisphere.
Sourcepub fn fibonacci_sphere(&self, n: usize) -> Vec<[f64; 3]>
pub fn fibonacci_sphere(&self, n: usize) -> Vec<[f64; 3]>
3-D Fibonacci sphere packing.
Generates n nearly uniformly distributed points on the sphere surface
using the golden-angle Fibonacci lattice method.
Sourcepub fn stereographic_project(&self, p: [f64; 3]) -> Option<[f64; 2]>
pub fn stereographic_project(&self, p: [f64; 3]) -> Option<[f64; 2]>
Stereographic projection from the sphere to the plane.
Projects a point p on the sphere to the stereographic plane using
the south pole as the projection center. The north pole maps to
infinity; the south pole is undefined.
Returns (x_plane, y_plane) or None if p is at (or near) the south pole.
Sourcepub fn stereographic_unproject(&self, uv: [f64; 2]) -> [f64; 3]
pub fn stereographic_unproject(&self, uv: [f64; 2]) -> [f64; 3]
Inverse stereographic projection from the plane to the sphere.
Maps (x_plane, y_plane) back to a point on the sphere.
Uses the formula: X = 4r²x/D, Y = 4r²y/D, Z = r(D - 4r²)/D
where D = x² + y² + 4r².
Sourcepub fn sh_l3(m: i32, theta: f64, phi: f64) -> f64
pub fn sh_l3(m: i32, theta: f64, phi: f64) -> f64
Spherical harmonic (l=3) coefficient Y_3^m(theta, phi).
Extends spherical_harmonic to degree 3.
Sourcepub fn cap_solid_angle(&self, h: f64) -> f64
pub fn cap_solid_angle(&self, h: f64) -> f64
Compute the solid angle subtended by a spherical cap of height h.
Ω = 2π(1 - cos θ) where cos θ = 1 - h/r.
Trait Implementations§
Source§impl Shape for Sphere
impl Shape for Sphere
Source§fn bounding_box(&self) -> Aabb
fn bounding_box(&self) -> Aabb
Source§fn support_point(&self, direction: &Vec3) -> Vec3
fn support_point(&self, direction: &Vec3) -> Vec3
Source§fn center_of_mass(&self) -> Vec3
fn center_of_mass(&self) -> Vec3
Source§fn inertia_tensor(&self, mass: Real) -> Mat3
fn inertia_tensor(&self, mass: Real) -> Mat3
Source§fn ray_cast(
&self,
ray_origin: &Vec3,
ray_direction: &Vec3,
max_toi: Real,
) -> Option<RayHit>
fn ray_cast( &self, ray_origin: &Vec3, ray_direction: &Vec3, max_toi: Real, ) -> Option<RayHit>
max_toi.Source§fn mass_properties(&self, density: Real) -> MassProperties
fn mass_properties(&self, density: Real) -> MassProperties
Auto Trait Implementations§
impl Freeze for Sphere
impl RefUnwindSafe for Sphere
impl Send for Sphere
impl Sync for Sphere
impl Unpin for Sphere
impl UnsafeUnpin for Sphere
impl UnwindSafe for Sphere
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.