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-')
我们也可以直接使用凸包的顶点,对于二维凸包,保证顶点按逆时针顺序排列
>>> 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,)
形成凸包顶点的点的索引。 对于二维凸包,顶点按逆时针顺序排列。 对于其他维度,它们按输入顺序排列。
- simplices整数 ndarray,形状 (nfacet, ndim)
形成凸包的简单面的点的索引。
- neighbors整数 ndarray,形状 (nfacet, ndim)
每个面的相邻面的索引。 第 k 个邻居与第 k 个顶点相对。 -1 表示没有邻居。
- equations双精度浮点数 ndarray,形状 (nfacet, ndim+1)
形成面的超平面方程 [法线,偏移量](更多信息请参阅 Qhull 文档)。
- coplanar整数 ndarray,形状 (ncoplanar, 3)
共面点的索引以及最近的面和最近的顶点索引的相应索引。 由于数值精度问题,共面点是不包含在三角剖分中的输入点。
如果未指定选项“Qc”,则不会计算此列表。
- goodbool 或 None 的 ndarray
一个一维布尔数组,指示哪些面是好的。 与计算好面的选项一起使用,例如 QGn 和 QG-n。 好面被定义为从点 n 可见 (n) 或不可见 (-n) 的面,其中 n 是 “points” 中的第 n 个点。 “good” 属性可用作 “simplices” 的索引,以返回好的(可见的)面:simplices[good]。一个面仅从凸包外部可见,共面性和退化都不能算作可见性的情况。
如果未指定 “QGn” 或 “QG-n” 选项,则返回 None。
在版本 1.3.0 中添加。
- area浮点数
当输入维度 > 2 时,凸包的表面积。 当输入
points
为二维时,这是凸包的周长。在版本 0.17.0 中添加。
- volume浮点数
当输入维度 > 2 时,凸包的体积。 当输入
points
为二维时,这是凸包的面积。在版本 0.17.0 中添加。
方法
add_points
(points[, restart])处理一组额外的新点。
close
()完成增量处理。