scipy.spatial.

ConvexHull#

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

N 維空間中的凸包。

版本 0.12.0 新增。

參數:
points浮點數 ndarray,形狀 (npoints, ndim)

用於建構凸包的點座標

incrementalbool,選用

允許增量新增點。這會佔用一些額外資源。

qhull_optionsstr,選用

傳遞給 Qhull 的額外選項。詳情請參閱 Qhull 手冊。(預設值:ndim > 4 時為 “Qx”,否則為 “”)選項 “Qt” 始終啟用。

引發:
QhullError

當 Qhull 遇到錯誤情況時引發,例如幾何退化,且未啟用解析選項。

ValueError

如果給定不相容的陣列作為輸入時引發。

註解

凸包是使用 Qhull 程式庫 計算的。

參考文獻

範例

隨機點集的凸包

>>> from scipy.spatial import ConvexHull, convex_hull_plot_2d
>>> import numpy as np
>>> rng = np.random.default_rng()
>>> points = rng.random((30, 2))   # 30 random points in 2-D
>>> hull = ConvexHull(points)

繪製它

>>> import matplotlib.pyplot as plt
>>> plt.plot(points[:,0], points[:,1], 'o')
>>> for simplex in hull.simplices:
...     plt.plot(points[simplex, 0], points[simplex, 1], 'k-')

我們也可以直接使用凸包的頂點,對於 2 維凸包,保證頂點以逆時針順序排列

>>> plt.plot(points[hull.vertices,0], points[hull.vertices,1], 'r--', lw=2)
>>> plt.plot(points[hull.vertices[0],0], points[hull.vertices[0],1], 'ro')
>>> plt.show()
../../_images/scipy-spatial-ConvexHull-1_00_00.png

從某個點可見的面

建立一個正方形,並在正方形上方新增一個點。

>>> generators = np.array([[0.2, 0.2],
...                        [0.2, 0.4],
...                        [0.4, 0.4],
...                        [0.4, 0.2],
...                        [0.3, 0.6]])

使用 QG 選項呼叫 ConvexHull。QG4 表示計算不包含點 4 的凸包部分,指示從點 4 可見的面。

>>> hull = ConvexHull(points=generators,
...                   qhull_options='QG4')

“good” 陣列指示哪些面從點 4 可見。

>>> print(hull.simplices)
    [[1 0]
     [1 2]
     [3 0]
     [3 2]]
>>> print(hull.good)
    [False  True False False]

現在繪製它,突出顯示可見的面。

>>> fig = plt.figure()
>>> ax = fig.add_subplot(1,1,1)
>>> for visible_facet in hull.simplices[hull.good]:
...     ax.plot(hull.points[visible_facet, 0],
...             hull.points[visible_facet, 1],
...             color='violet',
...             lw=6)
>>> convex_hull_plot_2d(hull, ax=ax)
    <Figure size 640x480 with 1 Axes> # may vary
>>> plt.show()
../../_images/scipy-spatial-ConvexHull-1_01_00.png
屬性:
points雙精度浮點數 ndarray,形狀 (npoints, ndim)

輸入點的座標。

vertices整數 ndarray,形狀 (nvertices,)

形成凸包頂點的點索引。對於 2 維凸包,頂點以逆時針順序排列。對於其他維度,它們以輸入順序排列。

simplices整數 ndarray,形狀 (nfacet, ndim)

形成凸包單體面的點索引。

neighbors整數 ndarray,形狀 (nfacet, ndim)

每個面的相鄰面索引。第 k 個鄰居與第 k 個頂點相對。-1 表示沒有鄰居。

equations雙精度浮點數 ndarray,形狀 (nfacet, ndim+1)

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

coplanar整數 ndarray,形狀 (ncoplanar, 3)

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

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

good布林值 ndarray 或 None

一維布林值陣列,指示哪些面是好的。與計算好面的選項一起使用,例如 QGn 和 QG-n。好面定義為從點 n 可見 (n) 或不可見 (-n) 的面,其中 n 是 'points' 中的第 n 個點。“good” 屬性可以用作 'simplices' 的索引,以傳回好(可見)面:simplices[good]。面僅從凸包外部可見,共面性和退化性均不計為可見性的情況。

如果未指定 “QGn” 或 “QG-n” 選項,則傳回 None。

版本 1.3.0 新增。

area浮點數

當輸入維度 > 2 時,凸包的表面積。當輸入 points 為 2 維時,這是凸包的周長。

版本 0.17.0 新增。

volume浮點數

當輸入維度 > 2 時,凸包的體積。當輸入 points 為 2 維時,這是凸包的面積。

版本 0.17.0 新增。

方法

add_points(points[, restart])

處理一組額外的新點。

close()

完成增量處理。