用于从一组点创建凸面层的高效算法

时间:2012-11-09 03:52:52

标签: python convex-hull

我有一个点列表,我正在尝试在python中生成凸面层。

目前我只是使用以下内容:

def convex_layers(points):
   points = sorted(set(points))
   layers = []
   while points:
      #Create the next convex hull
      hull = convex_hull(points)

      #Create the new list of points
      for point in hull:
         points.remove(point)

      #Update the list of layers
      layers.append(hull)
   return layers 

这只是一次创建一个凸包。虽然它有效,但它似乎很像只是通过重复添加来试图繁殖。所以我要问的是,是否有一种更有效的算法专门用于从一组点创建凸面层

2 个答案:

答案 0 :(得分:3)

如果使用monotone chain algorithm,则只需进行一次词典排序。然后可以在O(n)时间内找到每个连续层。这应该比每层的排序更快。

答案 1 :(得分:0)

您可以尝试使用scipy spatial.convexHull

或者,我发布了一些code on GitHub