scipy.spatial.

Delaunay#

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

N 維空間的 Delaunay 鑲嵌。

版本 0.9 新增。

參數:
points浮點數組,形狀為 (npoints, 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 函式庫 計算的。

注意

除非您傳入 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雙精度浮點數組,形狀為 (npoints, ndim)

輸入點的坐標。

simplices整數數組,形狀為 (nsimplex, ndim+1)

形成三角剖分中單體的點的索引。對於 2-D,點以逆時針方向定向。

neighbors整數數組,形狀為 (nsimplex, ndim+1)

每個單體的鄰居單體的索引。第 k 個鄰居與第 k 個頂點相對。對於邊界上的單體,-1 表示沒有鄰居。

equations雙精度浮點數組,形狀為 (nsimplex, ndim+2)

[法向量,偏移量] 形成拋物面上的面的超平面方程式(詳情請參閱 Qhull 文件)。

paraboloid_scale, paraboloid_shift浮點數

額外拋物面維度的縮放和位移(詳情請參閱 Qhull 文件)。

transform雙精度浮點數組,形狀為 (nsimplex, ndim+1, ndim)

x 到重心坐標 c 的仿射變換。

vertex_to_simplex整數數組,形狀為 (npoints,)

查找陣列,從頂點到它所屬的某個單體。

convex_hull整數數組,形狀為 (nfaces, ndim)

形成點集的凸包的面的頂點。

coplanar整數數組,形狀為 (ncoplanar, 3)

共面點的索引以及最近面的索引和最近頂點的索引。共面點是由於數值精度問題而包含在三角剖分中的輸入點。

如果未指定選項 “Qc”,則不會計算此列表。

版本 0.12.0 新增。

vertex_neighbor_vertices兩個整數數組的元組;(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 的超平面距離。