当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy spatial.SphericalVoronoi用法及代码示例


本文简要介绍 python 语言中 scipy.spatial.SphericalVoronoi 的用法。

用法:

class  scipy.spatial.SphericalVoronoi(points, radius=1, center=None, threshold=1e-06)#

Voronoi 球体表面的图表。

参数

points 浮点数数组,形状(npoints,ndim)

用于构造球形Voronoi 图的点的坐标。

radius 浮点数,可选

球体半径(默认值:1)

center 浮点数的ndarray,形状(ndim,)

球心(默认:原点)

threshold 浮点数

用于检测点和球体参数之间的重复点和不匹配的阈值。 (默认值:1e-06)

抛出

ValueError

如果有重复的点。如果提供的半径与点不一致。

注意

球形Voronoi 图算法的执行过程如下。计算输入点(生成器)的凸包,相当于它们在球体表面上的 Delaunay 三角剖分 [Caroli]。然后使用凸包邻居信息对每个生成器周围的 Voronoi 区域顶点进行排序。与 Voronoi 区域顶点排序的基于角度的方法相比,后一种方法对浮点问题的敏感度要低得多。

球形Voronoi算法性能的经验评估表明二次时间复杂度(对数线性是最佳的,但算法实现起来更具挑战性)。

参考

[卡罗利]

卡罗利等人。对球体上或球体附近的点进行稳健且高效的 Delaunay 三角剖分。研究报告 RR-7004,2009。

[VanOosterom]

范 Oosterom 和 Strackee。平面三角形的立体角。 IEEE Transactions on Biomedical Engineering, 2, 1983, pp 125-126。

例子

做一些导入并在立方体上取一些点:

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.spatial import SphericalVoronoi, geometric_slerp
>>> from mpl_toolkits.mplot3d import proj3d
>>> # set input data
>>> points = np.array([[0, 0, 1], [0, 0, -1], [1, 0, 0],
...                    [0, 1, 0], [0, -1, 0], [-1, 0, 0], ])

计算球面Voronoi图:

>>> radius = 1
>>> center = np.array([0, 0, 0])
>>> sv = SphericalVoronoi(points, radius, center)

生成图:

>>> # sort vertices (optional, helpful for plotting)
>>> sv.sort_vertices_of_regions()
>>> t_vals = np.linspace(0, 1, 2000)
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111, projection='3d')
>>> # plot the unit sphere for reference (optional)
>>> 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)
>>> # plot generator points
>>> ax.scatter(points[:, 0], points[:, 1], points[:, 2], c='b')
>>> # plot Voronoi vertices
>>> ax.scatter(sv.vertices[:, 0], sv.vertices[:, 1], sv.vertices[:, 2],
...                    c='g')
>>> # indicate Voronoi regions (as Euclidean polygons)
>>> 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()
scipy-spatial-SphericalVoronoi-1.png

属性

points 形状的双数组(npoints,ndim)

ndim 维度中的点以从中生成Voronoi 图

radius 双倍的

球体半径

center 形状的双数组 (ndim,)

球心

vertices 形状的双数组(nvertices,ndim)

Voronoi顶点对应点

regions 形状整数列表列表 (npoints, _ )

n-th 条目是一个列表,由属于 n-th 点的顶点的索引组成,以点为单位

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.spatial.SphericalVoronoi。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。