S (x, y, z)
,如何找到这些点的 凸包(convex hull)
?我试图理解来自这里的算法,但没有得到太多信息。
它说:
首先将所有点投影到xy平面上,并通过选择具有最高y坐标的点并执行一次礼品包装(gift wrapping)来确定边缘上的另一个端点,从而找出肯定在凸壳上的边缘。这是不完整凸壳的第一部分。然后我们逐步构建外壳。考虑这个第一条边;现在找到另一个点以形成外壳的第一个三角形面。我们通过选择这个点来完成此操作,使得当适当地查看时,所有其他点都位于该三角形面的右侧(就像在礼品包装算法中那样,我们选择了一条边,使得所有其他点都在该边的右侧)。现在有三条边在凸壳中;继续进行,我们随意选择其中之一,再次浏览所有点以找到另一个点以该边建立新的三角形面,重复此过程,直到没有剩余的边。(当我们创建一个新的三角形面时,我们会向池中添加两条边;但是,我们必须首先检查它们是否已经被添加到凸壳中,在这种情况下,我们会忽略它们。)面数为O(n),每次迭代需要O(n)的时间,因为我们必须扫描所有剩余的点,总共的时间复杂度为O(n2)。
请问有没有人能以更清晰的方式解释它或提出一个更简单的替代方法?