bundles / scipy latest / scipy / spatial / _spherical_voronoi / SphericalVoronoi
class
scipy.spatial._spherical_voronoi:SphericalVoronoi
Signature
class SphericalVoronoi ( points , radius = 1 , center = None , threshold = 1e-06 ) Members
-
__init__ -
_calc_vertices_regions -
_calculate_areas_2d -
_calculate_areas_3d -
calculate_areas -
sort_vertices_of_regions
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')✗
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