bundles / scipy 1.18.0 / scipy / spatial / _spherical_voronoi / SphericalVoronoi
class
scipy.spatial._spherical_voronoi:SphericalVoronoi
Signature
class SphericalVoronoi(points, radius = 1, center = None, threshold = 1e-06)Members
Summary
Voronoi diagrams on the surface of a sphere.
Extended Summary
Parameters
points: ndarray of floats, shape (npoints, ndim)Coordinates of points from which to construct a spherical Voronoi diagram.
radius: float, optionalRadius of the sphere (Default: 1)
center: ndarray of floats, shape (ndim,)Center of sphere (Default: origin)
threshold: floatThreshold for detecting duplicate points and mismatches between points and sphere parameters. (Default: 1e-06)
Attributes
points: double array of shape (npoints, ndim)the points in
ndimdimensions to generate the Voronoi diagram fromradius: doubleradius of the sphere
center: double array of shape (ndim,)center of the sphere
vertices: double array of shape (nvertices, ndim)Voronoi vertices corresponding to points
regions: list of list of integers of shape (npoints, _ )the n-th entry is a list consisting of the indices of the vertices belonging to the n-th point in points
Methods
calculate_areasCalculates the areas of the Voronoi regions. For 2D point sets, the regions are circular arcs. The sum of the areas is
2 * pi * radius. For 3D point sets, the regions are spherical polygons. The sum of the areas is4 * pi * radius**2.
Raises
: ValueErrorIf there are duplicates in
points. If the providedradiusis not consistent withpoints.
Notes
The spherical Voronoi diagram algorithm proceeds as follows. The Convex Hull of the input points (generators) is calculated, and is equivalent to their Delaunay triangulation on the surface of the sphere [Caroli]. The Convex Hull neighbour information is then used to order the Voronoi region vertices around each generator. The latter approach is substantially less sensitive to floating point issues than angle-based methods of Voronoi region vertex sorting.
Empirical assessment of spherical Voronoi algorithm performance suggests quadratic time complexity (loglinear is optimal, but algorithms are more challenging to implement).
Examples
Do some imports and take some points on a cube:import numpy as np import matplotlib.pyplot as plt from scipy.spatial import SphericalVoronoi, geometric_slerp from mpl_toolkits.mplot3d import proj3d points = np.array([[0, 0, 1], [0, 0, -1], [1, 0, 0], [0, 1, 0], [0, -1, 0], [-1, 0, 0], ])✓
radius = 1 center = np.array([0, 0, 0]) sv = SphericalVoronoi(points, radius, center)✓
sv.sort_vertices_of_regions() t_vals = np.linspace(0, 1, 2000) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') u = np.linspace(0, 2 * np.pi, 100) v = np.linspace(0, np.pi, 100) x = np.outer(np.cos(u), np.sin(v)) y = np.outer(np.sin(u), np.sin(v)) z = np.outer(np.ones(np.size(u)), np.cos(v))✓
ax.plot_surface(x, y, z, color='y', alpha=0.1) ax.scatter(points[:, 0], points[:, 1], points[:, 2], c='b') ax.scatter(sv.vertices[:, 0], sv.vertices[:, 1], sv.vertices[:, 2], c='g') for region in sv.regions: n = len(region) for i in range(n): start = sv.vertices[region][i] end = sv.vertices[region][(i + 1) % n] result = geometric_slerp(start, end, t_vals) ax.plot(result[..., 0], result[..., 1], result[..., 2], c='k')✗
[<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f26510>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f25160>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f24980>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f278c0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f24c20>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f26cf0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f24050>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f246e0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f27a10>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f26900>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f26120>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f26f90>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f270e0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f26ba0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f27cb0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f27620>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f24d70>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f25010>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f25e80>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f263c0>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6f27770>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6491550>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f6492120>] [<mpl_toolkits.mplot3d.art3d.Line3D object at 0x7fa8f64916a0>]
ax.azim = 10 ax.elev = 40 _ = ax.set_xticks([]) _ = ax.set_yticks([]) _ = ax.set_zticks([]) fig.set_size_inches(4, 4) plt.show()✓

See also
- Voronoi
Conventional Voronoi diagrams in N dimensions.
Aliases
scipy.spatial.SphericalVoronoi