Pyhull python 库:凸包的输出不是输入集的子集

问题描述 投票:0回答:1

我安装了 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
的最小凸集。因此,定义凸包的点是输入集的子集,而库的输出则不是。

python convex-hull pyhull
1个回答
0
投票

您可以使用

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])
© www.soinside.com 2019 - 2024. All rights reserved.