scipy.spatial.

Delaunay#

class scipy.spatial.Delaunay(points, furthest_site=False, incremental=False, qhull_options=None)#

N 维的 Delaunay 三角剖分。

在 0.9 版本中添加。

参数:
pointsndarray of floats, shape (npoints, ndim)

要三角化的点的坐标

furthest_sitebool,可选

是否计算最远点 Delaunay 三角剖分。默认值:False

在 0.12.0 版本中添加。

incrementalbool,可选

允许逐步添加新点。这会占用一些额外的资源。

qhull_optionsstr,可选

传递给 Qhull 的其他选项。有关详细信息,请参阅 Qhull 手册。当 ndim > 4 时,始终启用“Qt”选项;否则,将启用“Qbb Qc Qz Qx Q12”选项。增量模式省略了“Qz”。

在 0.12.0 版本中添加。

引发:
QhullError

当 Qhull 遇到错误条件(例如在未启用解决选项时出现几何退化)时引发此错误。

ValueError

当给出的数组不兼容时引发此错误。

注意

三角剖分是使用 Qhull 库计算的,Qhull 库

注意

除非你传入 Qhull 选项“QJ”,否则 Qhull 无法保证每个输入点都以顶点形式出现在 Delaunay 三角剖分中。省略的点列于coplanar属性中。

示例

点集三角剖分

>>> import numpy as np
>>> points = np.array([[0, 0], [0, 1.1], [1, 0], [1, 1]])
>>> from scipy.spatial import Delaunay
>>> tri = Delaunay(points)

我们可以绘制它

>>> import matplotlib.pyplot as plt
>>> plt.triplot(points[:,0], points[:,1], tri.simplices)
>>> plt.plot(points[:,0], points[:,1], 'o')
>>> plt.show()
../../_images/scipy-spatial-Delaunay-1_00_00.png

形成三角剖分的两个三角形的点索引和坐标

>>> tri.simplices
array([[2, 3, 0],                 # may vary
       [3, 1, 0]], dtype=int32)

请注意,取决于舍入误差如何,单纯形可能与上述顺序不同。

>>> points[tri.simplices]
array([[[ 1. ,  0. ],            # may vary
        [ 1. ,  1. ],
        [ 0. ,  0. ]],
       [[ 1. ,  1. ],
        [ 0. ,  1.1],
        [ 0. ,  0. ]]])

三角形 0 是三角形 1 唯一的相邻三角形,它与三角形 1 的顶点 1 相对

>>> tri.neighbors[1]
array([-1,  0, -1], dtype=int32)
>>> points[tri.simplices[1,1]]
array([ 0. ,  1.1])

我们可以找出哪些三角形点在里面

>>> p = np.array([(0.1, 0.2), (1.5, 0.5), (0.5, 1.05)])
>>> tri.find_simplex(p)
array([ 1, -1, 1], dtype=int32)

数组中返回的整数是相应点所在的单纯形的索引。如果返回 -1,则该点不在任何单纯形中。请注意,以下示例中的快捷方式仅对有效点有效,因为无效点会产生 -1,而 -1 本身是列表中最后一个单纯形的有效索引。

>>> p_valids = np.array([(0.1, 0.2), (0.5, 1.05)])
>>> tri.simplices[tri.find_simplex(p_valids)]
array([[3, 1, 0],                 # may vary
       [3, 1, 0]], dtype=int32)

我们还可以在三角形 1 中计算这些点的重心坐标

>>> b = tri.transform[1,:2].dot(np.transpose(p - tri.transform[1,2]))
>>> np.c_[np.transpose(b), 1 - b.sum(axis=0)]
array([[ 0.1       ,  0.09090909,  0.80909091],
       [ 1.5       , -0.90909091,  0.40909091],
       [ 0.5       ,  0.5       ,  0.        ]])

第一个点的坐标都是正值,这意味着它确实在三角形内部。第三个点在一条边上,因此没有第三个坐标。

属性:
points双精度 ndarray,形状 (npoints, ndim)

输入点坐标。

simplices整数 ndarray,形状 (nsimplex, ndim+1)

三角剖分中形成单纯形的点的索引。对于二维,这些点的方位为逆时针。

neighbors整数 ndarray,形状 (nsimplex, ndim+1)

每个单纯形的邻居单纯形索引。第 k 个邻居与第 k 个顶点相对。对于边界上的单纯形,-1 表示没有邻居。

equations双精度 ndarray,形状 (nsimplex, ndim+2)

[法线、偏移] 构成抛物线上的平面方程(有关更多信息,请参阅Qhull 文档)。

paraboloid_scale, paraboloid_shift浮点数

额外抛物线维度的缩放和移位(有关更多信息,请参阅Qhull 文档)。

transform双精度 ndarray,形状 (nsimplex, ndim+1, ndim)

x到重心坐标c的仿射变换。

vertex_to_simplexint型ndarray,形状(npoints,)

查找数组,从一个顶点开始,到一些单纯形中,这是其中一部分。

convex_hullint型ndarray,形状(nfaces,ndim)

构成点集凸包的面的顶点。

coplanarint型ndarray,形状(ncoplanar,3)

共面点的索引以及最近面和最近顶点的相应索引。共面点是由于数值精度问题而包含在三角测量中的输入点。

如果未指定“Qc”选项,则不计算此列表。

在 0.12.0 版本中添加。

vertex_neighbor_vertices两个int型ndarrays组成的元组; (indptr,indices)

相邻顶点的顶点。

furthest_site

True表示最远站点三角测量,False表示不是。

1.4.0 版中添加。

方法

add_points(points[, restart])

处理一组附加新点。

close()

完成增量处理。

find_simplex(self, xi[, bruteforce, tol])

查找包含给定点的单纯形。

lift_points(self, x)

提升点到 Qhull 抛物面。

plane_distance(self, xi)

计算与xi点的超平面距离,从所有单纯形开始。