scipy.spatial.ConvexHull

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

N维的凸壳。

0.12.0 新版功能.

参数
points浮点数,形状(npoint,ndim)

用于构造凸包的点的坐标

incremental布尔值,可选

允许增量添加新点。这会占用一些额外的资源。

qhull_options字符串,可选

要传递给Qhull的其他选项。有关详细信息,请参阅Qhull手册。(默认值:ndim>4为“qx”,否则为“”)选项“qt”始终启用。

加薪
QhullError

当Qhull遇到错误条件时引发,例如未启用要解决的选项时的几何退化。

ValueError

如果将不兼容的数组作为输入给定,则引发。

注意事项

凸壳是使用 Qhull library

参考文献

Qhull

http://www.qhull.org/

示例

随机点集的凸包:

>>> from scipy.spatial import ConvexHull, convex_hull_plot_2d
>>> 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,形状(nverts,)

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

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

形成凸壳的简单面的点的索引。

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

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

equations双倍形状的ndarray(nfacet,ndim+1)

[法线,偏移] 形成小平面的超平面方程(请参见 Qhull documentation 有关更多信息,请参见)。

coplanarNdarray of int,Shape(非共面,3)

共面点的索引以及最近面和最近顶点的相应索引。共面点是输入点,这些输入点 not 由于数值精度问题而包含在三角测量中。

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

goodndarray of bool或ndarray of bool

一维布尔数组,指示哪些面是好的。与计算好的面的选项一起使用,例如QGn和QG-n。好的面被定义为从点n可见(N)或不可见(-n)的面,其中n是“点”中的第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 \(积分[, restart] )

处理一组附加的新点。

close \()

完成增量处理。