我安装了 Pyhull 库来生成一组点的凸包。文档和用法都很简单。然而,该库的输出很奇怪。 它在 pythonhosted 的文档有这个片段
from pyhull.convex_hull import ConvexHull
pts = [[-0.5, -0.5], [-0.5, 0.5], [0.5, -0.5], [0.5, 0.5], [0,0]]
hull = ConvexHull(pts)
hull.vertices
hull.points
输出分别为
[[0, 2], [1, 0], [2, 3], [3, 1]]
[[-0.5, -0.5], [-0.5, 0.5], [0.5, -0.5], [0.5, 0.5], [0, 0]]
点集
P
的凸包是包含P
的最小凸集。因此,定义凸包的点是输入集的子集,而库的输出则不是。
您可以使用
set()
查找唯一索引,然后提取点:
from pyhull.convex_hull import ConvexHull
pts = [[-0.5, -0.5], [-0.5, 0.5], [0.5, -0.5], [0.5, 0.5], [0, 0]]
hull = ConvexHull(pts)
I = set((i for edge in hull.vertices for i in edge))
P = (hull.points[i] for i in I)
print(I, tuple(P))
{0, 1, 2, 3} ([-0.5, -0.5], [-0.5, 0.5], [0.5, -0.5], [0.5, 0.5])