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<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.