pub struct SphericalVoronoi { /* private fields */ }Expand description
SphericalVoronoi calculates a Voronoi diagram on the surface of a sphere.
§Examples
// Create points on a sphere (these should be normalized)
// Using points that avoid degenerate simplices
let angles = [(0.5_f64, 0.0_f64), (0.5_f64, 1.0_f64), (1.0_f64, 0.5_f64),
(1.5_f64, 1.0_f64), (0.8_f64, 1.5_f64)];
let mut points = Vec::new();
for &(phi, theta) in angles.iter() {
let x = phi.sin() * theta.cos();
let y = phi.sin() * theta.sin();
let z = phi.cos();
points.push([x, y, z]);
}
let points = scirs2_core::ndarray::arr2(&points);
// Create a SphericalVoronoi diagram
let radius = 1.0;
let center = array![0.0, 0.0, 0.0];
let sv = SphericalVoronoi::new(&points.view(), radius, Some(¢er), None)?;
// Access the Voronoi regions
let regions = sv.regions();
println!("Number of regions: {}", regions.len());
// Access the Voronoi vertices
let vertices = sv.vertices();
println!("Number of vertices: {}", vertices.nrows());
Implementations§
Source§impl SphericalVoronoi
impl SphericalVoronoi
Sourcepub fn new(
points: &ArrayView2<'_, f64>,
radius: f64,
center: Option<&Array1<f64>>,
threshold: Option<f64>,
) -> SpatialResult<Self>
pub fn new( points: &ArrayView2<'_, f64>, radius: f64, center: Option<&Array1<f64>>, threshold: Option<f64>, ) -> SpatialResult<Self>
Creates a new SphericalVoronoi diagram from points on a sphere.
§Arguments
points- Coordinates of points from which to construct the diagram. These points should be on the surface of the sphere.radius- Radius of the sphere.center- Center of the sphere. If None, the origin will be used.threshold- Threshold for detecting duplicate points and mismatches between points and sphere parameters. If None, 1e-6 is used.
§Returns
Returns a Result containing the SphericalVoronoi object if successful, or an error if the input is invalid.
Sourcepub fn regions(&self) -> &Vec<Vec<usize>>
pub fn regions(&self) -> &Vec<Vec<usize>>
Returns the Voronoi regions as lists of vertex indices.
Sourcepub fn simplices(&self) -> &[Vec<usize>]
pub fn simplices(&self) -> &[Vec<usize>]
Returns the Delaunay simplices (triangulations on the sphere).
Sourcepub fn circumcenters(&self) -> &Array2<f64>
pub fn circumcenters(&self) -> &Array2<f64>
Returns the circumcenters of the Delaunay triangulations.
Sourcepub fn sort_vertices_of_regions(&mut self) -> SpatialResult<()>
pub fn sort_vertices_of_regions(&mut self) -> SpatialResult<()>
Sorts the vertices of each Voronoi region in a counterclockwise order. This is useful for visualization purposes.
Sourcepub fn calculate_areas(&mut self) -> SpatialResult<&[f64]>
pub fn calculate_areas(&mut self) -> SpatialResult<&[f64]>
Calculates the areas of the Voronoi regions.
For 3D point sets, the sum of all areas will be 4π * radius².
Sourcepub fn areas(&mut self) -> SpatialResult<&[f64]>
pub fn areas(&mut self) -> SpatialResult<&[f64]>
Returns pre-calculated areas of Voronoi regions, or calculates them if not already available.
Sourcepub fn geodesic_distance(
&self,
point1: &ArrayView1<'_, f64>,
point2: &ArrayView1<'_, f64>,
) -> SpatialResult<f64>
pub fn geodesic_distance( &self, point1: &ArrayView1<'_, f64>, point2: &ArrayView1<'_, f64>, ) -> SpatialResult<f64>
Sourcepub fn geodesic_distances_to_generators(
&self,
point: &ArrayView1<'_, f64>,
) -> SpatialResult<Vec<f64>>
pub fn geodesic_distances_to_generators( &self, point: &ArrayView1<'_, f64>, ) -> SpatialResult<Vec<f64>>
Sourcepub fn nearest_generator(
&self,
point: &ArrayView1<'_, f64>,
) -> SpatialResult<(usize, f64)>
pub fn nearest_generator( &self, point: &ArrayView1<'_, f64>, ) -> SpatialResult<(usize, f64)>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for SphericalVoronoi
impl RefUnwindSafe for SphericalVoronoi
impl Send for SphericalVoronoi
impl Sync for SphericalVoronoi
impl Unpin for SphericalVoronoi
impl UnwindSafe for SphericalVoronoi
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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> 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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.