pub struct Cone {
pub radius: Real,
pub half_height: Real,
}Expand description
A cone defined by radius and half-height along the Y axis. Base is at y = -half_height, apex at y = +half_height.
Fields§
§radius: RealRadius of the base.
half_height: RealHalf-height along the Y axis.
Implementations§
Source§impl Cone
impl Cone
Sourcepub fn volume_explicit(&self) -> Real
pub fn volume_explicit(&self) -> Real
Volume: πr²h/3 (h = full height = 2*half_height).
Sourcepub fn surface_area(&self) -> Real
pub fn surface_area(&self) -> Real
Surface area: base disk + lateral surface = πr² + πr*slant. slant = sqrt(r² + h²) where h = full height.
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.
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 (or inside) the cone to point p.
Sourcepub fn support(&self, direction: [f64; 3]) -> [f64; 3]
pub fn support(&self, direction: [f64; 3]) -> [f64; 3]
GJK support function using plain arrays. Returns the farthest point on the cone in the given direction.
Sourcepub fn slant_height(&self) -> f64
pub fn slant_height(&self) -> f64
Slant height of the cone: sqrt(r² + h²).
Sourcepub fn half_angle(&self) -> f64
pub fn half_angle(&self) -> f64
Half angle of the cone in radians: atan(r / h).
Sourcepub fn lateral_surface_area(&self) -> f64
pub fn lateral_surface_area(&self) -> f64
Lateral (side) surface area only: πr * slant.
Sourcepub fn contains_point(&self, p: [f64; 3]) -> bool
pub fn contains_point(&self, p: [f64; 3]) -> bool
Returns true if p is inside the cone.
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 cone surface. Negative inside, positive outside.
Sourcepub fn radius_at_y(&self, y: f64) -> f64
pub fn radius_at_y(&self, y: f64) -> f64
Radius at a given y coordinate (clamped to cone range).
Sourcepub fn truncated_cone(&self, cut_ratio: f64) -> (f64, f64, f64)
pub fn truncated_cone(&self, cut_ratio: f64) -> (f64, f64, f64)
Create a truncated cone (frustum) by cutting at a given height ratio.
cut_ratio is in [0, 1] where 0 = base, 1 = apex.
Returns (top_radius, bottom_radius, half_height).
Sourcepub fn truncated_cone_volume(&self, cut_ratio: f64) -> f64
pub fn truncated_cone_volume(&self, cut_ratio: f64) -> f64
Volume of a truncated cone (frustum).
cut_ratio is in [0, 1].
Sourcepub fn ray_cast_base_cap(
&self,
origin: [f64; 3],
direction: [f64; 3],
max_toi: f64,
) -> Option<(f64, [f64; 3])>
pub fn ray_cast_base_cap( &self, origin: [f64; 3], direction: [f64; 3], max_toi: f64, ) -> Option<(f64, [f64; 3])>
Ray cast against only the base cap at y = -half_height.
Sourcepub fn closest_point_on_lateral(&self, p: [f64; 3]) -> [f64; 3]
pub fn closest_point_on_lateral(&self, p: [f64; 3]) -> [f64; 3]
Closest point on the cone’s lateral surface to a point. This projects onto the side surface only (ignoring base cap).
Sourcepub fn ray_cone_analytic(
&self,
origin: [f64; 3],
direction: [f64; 3],
max_toi: f64,
) -> Option<(f64, [f64; 3], bool)>
pub fn ray_cone_analytic( &self, origin: [f64; 3], direction: [f64; 3], max_toi: f64, ) -> Option<(f64, [f64; 3], bool)>
Analytic ray-cone intersection (same as ray_cast but returns plain arrays).
Identical to ray_cast_array but additionally returns a boolean indicating
whether the hit is on the lateral surface (true) or base cap (false).
Sourcepub fn intersects_plane(&self, plane_normal: [f64; 3], plane_d: f64) -> bool
pub fn intersects_plane(&self, plane_normal: [f64; 3], plane_d: f64) -> bool
Cone-plane intersection.
Tests whether the cone intersects a plane defined by plane_normal (unit)
and plane_d (signed distance from origin: dot(n, x) = plane_d).
Returns true if any part of the cone (including base disk) is on or
crosses the plane.
Sourcepub fn frustum_from_cone(&self, y_bottom: f64, y_top: f64) -> (f64, f64, f64)
pub fn frustum_from_cone(&self, y_bottom: f64, y_top: f64) -> (f64, f64, f64)
Compute a frustum (truncated cone) from this cone.
Cuts the cone at heights y_bottom and y_top (in cone-local space,
where -half_height ≤ y_bottom < y_top ≤ half_height).
Returns (bottom_radius, top_radius, frustum_half_height).
Sourcepub fn sdf(&self, p: [f64; 3]) -> f64
pub fn sdf(&self, p: [f64; 3]) -> f64
Cone SDF (Signed Distance Function).
Returns negative inside the cone, positive outside.
Same as signed_distance but exposed under the SDF naming convention.
Sourcepub fn intersects_sphere(
&self,
sphere_center: [f64; 3],
sphere_radius: f64,
) -> bool
pub fn intersects_sphere( &self, sphere_center: [f64; 3], sphere_radius: f64, ) -> bool
Cone-sphere intersection test.
Returns true if the sphere (center + radius) overlaps the cone.
Uses the closest-point approach: if the closest point on the cone to
the sphere center is within sphere_radius, they intersect.
Sourcepub fn frustum_lateral_area(&self, y_bottom: f64, y_top: f64) -> f64
pub fn frustum_lateral_area(&self, y_bottom: f64, y_top: f64) -> f64
Lateral surface area of a frustum derived from this cone.
y_bottom and y_top are in cone-local Y coordinates.
Lateral area = π * (r_bottom + r_top) * slant_height_frustum.
Sourcepub fn apex_angle(&self) -> f64
pub fn apex_angle(&self) -> f64
Apex angle of the cone (full angle at the apex), in radians.
The full apex angle is 2 * atan(r / h) where h is the full height.
Sourcepub fn double_cone_params(&self) -> (f64, f64)
pub fn double_cone_params(&self) -> (f64, f64)
Create a double cone (bicone) by reflecting this cone across its base.
Returns the parameters of the upper half (this cone) and the lower half
(same dimensions, mirrored). Both have apex at ±half_height.
Sourcepub fn contains_point_double_cone(&self, p: [f64; 3]) -> bool
pub fn contains_point_double_cone(&self, p: [f64; 3]) -> bool
Returns true if p is inside the double cone (both upper and lower).
The double cone is symmetric about y=0. Upper half: apex at
+half_height, lower half: apex at -half_height.
Sourcepub fn unfold_lateral(&self, u: f64, t_slant: f64) -> [f64; 2]
pub fn unfold_lateral(&self, u: f64, t_slant: f64) -> [f64; 2]
Lateral surface unfolding: convert (u, t) to a point in the unrolled
lateral surface plane.
In the unrolled sector the slant height becomes the radial distance and
the azimuth u is scaled by sin(half_angle). Returns (x_unrolled, y_unrolled).
Sourcepub fn bounding_cone_of_points(points: &[[f64; 3]]) -> (f64, f64)
pub fn bounding_cone_of_points(points: &[[f64; 3]]) -> (f64, f64)
Bounding cone for a set of points: returns the smallest half-angle cone with its apex at the origin and axis along +Y that contains all points.
Returns (axis_half_angle_radians, axis_elevation) where the axis is
fixed to +Y.
Sourcepub fn volume_swept(&self, delta: [f64; 3]) -> f64
pub fn volume_swept(&self, delta: [f64; 3]) -> f64
Volume swept when the cone translates by vector delta.
Approximate: V_cone + base_area * |delta|.
Sourcepub fn sdf_gradient(&self, p: [f64; 3]) -> [f64; 3]
pub fn sdf_gradient(&self, p: [f64; 3]) -> [f64; 3]
Cone SDF gradient (approximate unit normal direction).
Returns the gradient of the SDF at p, suitable as the collision normal.
Sourcepub fn ray_intersection_count(
&self,
origin: [f64; 3],
direction: [f64; 3],
max_toi: f64,
) -> usize
pub fn ray_intersection_count( &self, origin: [f64; 3], direction: [f64; 3], max_toi: f64, ) -> usize
Ray-cone intersection count (lateral + base cap).
Returns the number of valid positive-t intersections within [0, max_toi].
Sourcepub fn solid_angle(&self) -> f64
pub fn solid_angle(&self) -> f64
Compute the solid angle subtended by the cone at the apex.
For a cone with half-angle α, the solid angle is 2π(1 - cos α).
Sourcepub fn base_rim_points(&self, n: usize) -> Vec<[f64; 3]>
pub fn base_rim_points(&self, n: usize) -> Vec<[f64; 3]>
Generate points on the base circle of the cone.
Returns n equally-spaced points on the base rim at y = -half_height.
Sourcepub fn sphere_inside_cone(&self, center: [f64; 3], sphere_radius: f64) -> bool
pub fn sphere_inside_cone(&self, center: [f64; 3], sphere_radius: f64) -> bool
Test whether a sphere at center with sphere_radius is entirely
inside the cone (a stricter test than intersects_sphere).
Sourcepub fn random_lateral_surface_point(&self, seed: u64) -> [f64; 3]
pub fn random_lateral_surface_point(&self, seed: u64) -> [f64; 3]
Sample a random point on the cone’s lateral surface using a deterministic PRNG.
Trait Implementations§
Source§impl Shape for Cone
impl Shape for Cone
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 Cone
impl RefUnwindSafe for Cone
impl Send for Cone
impl Sync for Cone
impl Unpin for Cone
impl UnsafeUnpin for Cone
impl UnwindSafe for Cone
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.