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 程式庫 計算的。
參考文獻
[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()
從某個點可見的面
建立一個正方形,並在正方形上方新增一個點。
>>> 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()
- 屬性:
- 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
()完成增量處理。