我有一大堆顶点,其中一些是边,一些是多余的(在形状内),我想删除它们。
我能想到的最简单的算法是,如果它们碰到其他人形成的形状,则逐个检查。但它应该是一个非常慢的算法。
我想过从边缘挑选一个(距离每个例子最远的一个)并计算从这个开始的最长路径...应该得到边缘路径,对吗?
有什么建议吗?
答案 0 :(得分:8)
多面体算法的技巧是选择一个适合您的输入和所需输出的技巧,因为有多种方法来表示多面体,并且表示之间的转换可能很昂贵。在这种情况下,您从点开始并希望以顶点结束,因此计算Graham scan顶点的convex hull算法应该可以解决问题,尽管可能需要花费一些精力才能将其扩展过去2-D案例。输入顶点的数量是O( n log n )。
答案 1 :(得分:6)
我不知道找到该多边形的最佳算法是什么,但您正在寻找的多边形称为“凸壳”。
通过搜索,你应该找到一个匹配的算法。
答案 2 :(得分:4)
The Convex Hull是计算几何中研究较多的问题之一。格雷厄姆扫描是更简单的convex hull algorithms之一,但肯定不是唯一的。 The Gift-wrapping Algorithm,也被称为贾维斯三月,是我所知道的最简单的。 The Stony Brook algorithm repository在C和C ++中有几种凸包算法的实现。 Geometry in Action主要显示凸壳的应用。以下是low-dimensional和arbitrary-dimensional凸包计算程序的集合。