找到顶点边缘(多边形)的最佳算法

Posted

技术标签:

【中文标题】找到顶点边缘(多边形)的最佳算法【英文标题】:Best Algorithm to find the edges (polygon) of vertices 【发布时间】:2010-10-03 10:25:30 【问题描述】:

我有大量顶点,其中一些是边,一些是多余的(在形状内部),我想删除这些。

我能想到的最简单的算法是一个一个地检查它们是否碰到了其他人形成的形状。但它应该是一个非常慢的算法。

我考虑从边缘选择一个(每个示例中距离原点最远的一个)并计算从这个开始的最长路径...应该得到边缘路径,对吧?

有什么建议吗?

【问题讨论】:

你想要一个覆盖所有点的一个多边形,还是你想要一个覆盖所有点的最小(就面积而言)多边形积分? @sykora,一个覆盖所有点的多边形。格雷厄姆扫描似乎有效。谢谢。 【参考方案1】:

多面体算法的诀窍是选择一个适合您的输入和所需输出的算法,因为表示多面体的方法不止一种,并且在表示之间进行转换可能会很昂贵。在这种情况下,您从点开始并希望以顶点结束,因此计算convex hull 的顶点的Graham scan 算法应该可以解决问题,尽管可能需要一些努力才能将其扩展到二维之外案子。输入顶点数为 O(n log n)。

【讨论】:

格雷厄姆扫描基本上给你凸包。【参考方案2】:

我不知道找到该多边形的最佳算法是什么,但您正在寻找的多边形称为“凸包”。

通过搜索,您应该会找到匹配算法。

【讨论】:

我不认为他在寻找凸包,因为他想要由他的顶点形成的多边形的边缘。凸包甚至会排除他可能想要的一些。 “有些是多余的(在形状内),我想删除那些。” 我不想减少边缘...我正在研究从一个顶点集合构建一个多边形,其中一些是多余的。 嗨,我如何取回我用来将多边形插入 mysql 数据库的顶点?【参考方案3】:

The Convex Hull 是计算几何研究较多的问题之一。 Graham Scan 是更简单的convex hull algorithms 之一,但肯定不是唯一的。 The Gift-wrapping Algorithm,也叫 Jarvis' March,是我所知道的最简单的。 The Stony *** algorithm repository 在 C 和 C++ 中有几种凸包算法的实现。 Geometry in Action 主要展示凸包的应用。这是low-dimensional 和arbitrary-dimensional 凸包计算程序的集合。

【讨论】:

以上是关于找到顶点边缘(多边形)的最佳算法的主要内容,如果未能解决你的问题,请参考以下文章

Java:找到凸多边形的最外层顶点

确定给定点是不是在多边形内

获取网格的边界边缘 - 按缠绕顺序

QPolygon:如何获得多边形的边缘

如何确定封闭的凹面多边形是否在里面? [关闭]

cf Round 613