scipy.spatial.Delaunay

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

N维的Delaunay细分。

0.9 新版功能.

参数
points浮点数,形状(npoint,ndim)

要三角化点的坐标

furthest_site布尔值,可选

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

0.12.0 新版功能.

incremental布尔值,可选

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

qhull_options字符串,可选

要传递给Qhull的其他选项。有关详细信息,请参阅Qhull手册。选项“Qt”始终处于启用状态。默认值:ndim>4时为“qbb qc qz qx q12”,否则为“qbb qc qz q12”。增量模式省略了“qz”。

0.12.0 新版功能.

加薪
QhullError

当Qhull遇到错误条件时引发,例如未启用要解决的选项时的几何退化。

ValueError

如果将不兼容的数组作为输入给定,则引发。

注意事项

镶嵌是使用Qhull库计算的 Qhull library

注解

除非传入Qhull选项“qj”,否则Qhull不能保证每个输入点在Delaunay三角剖分中都显示为顶点。省略的点列在 coplanar 属性。

示例

对一组点进行三角测量:

>>> 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双重线,形状(nsimplex,ndim+2)

[法线,偏移] 形成抛物面上小平面的超平面方程(请参见 Qhull documentation 有关更多信息,请参见)。

paraboloid_scale, paraboloid_shift浮动

额外抛物面尺寸的缩放和移位(请参见 Qhull documentation 有关更多信息,请参见)。

transform双倍形状的ndarray(nsimplex,ndim+1,ndim)

仿射变换来自 x 到重心坐标 c

vertex_to_simplex整数、形状的ndarray(npoints,)

查找数组,从顶点到它所属的某个单纯形。

convex_hull整数的ndarray,形状(nfaces,ndim)

形成点集凸包的小平面的顶点。

coplanarNdarray of int,Shape(非共面,3)

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

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

0.12.0 新版功能.

vertices

相同于 simplices ,但已弃用。

vertex_neighbor_vertices整数的两条ndarray的元组;(indptr,index)

顶点的相邻顶点。

furthest_site

如果这是最远的场地三角测量,则为True,否则为False。

1.4.0 新版功能.

方法:

add_points \(积分[, restart] )

处理一组附加的新点。

close \()

完成增量处理。

find_simplex \(自身,Xi[, bruteforce, tol] )

找出包含给定点的简式。

lift_points \(自身,x)

升力指向Qhull抛物面。

plane_distance \(自身,Xi)

计算到点的超平面距离 xi 从所有的简单化中脱颖而出。