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 手册。(默认值:“Qx”用于 ndim > 4,否则为 “”)始终启用选项 “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-D,保证它们按逆时针顺序排列

>>> 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,)

形成凸包顶点的点的索引。对于二维凸包,顶点按逆时针顺序排列。对于其他维度,它们按输入顺序排列。

simplices整数的 ndarray,形状为 (nfacet, ndim)

形成凸包单纯面的点的索引。

neighbors整数的 ndarray,形状为 (nfacet, ndim)

每个面的邻居面的索引。第 k 个邻居与第 k 个顶点相对。-1 表示没有邻居。

equations浮点数的 ndarray,形状为 (nfacet, ndim+1)

形成面的超平面方程的 [法线、偏移量](详情请见 Qhull 文档)。

coplanarint 的 ndarray,形状为 (ncoplanar, 3)

共面点的索引以及最近面的相应索引和最近顶点索引。共面点是在三角剖分中包括的输入点,原因是由于数字精度问题。

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

good布尔或无值的 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])

处理一组其他新点。

关闭()

结束增量处理。