给定非凸多边形中的大量顶点,我如何找到边缘?

时间:2010-04-30 00:19:35

标签: outline polygons vertices concave

我有一组顶点(称为A),我想找到所有边界顶点,这样边界顶点集就是形状的轮廓。

A中的许多顶点都是多余的,因为它们在形状内部,我想摆脱这些顶点。

我的问题与Best Algorithm to find the edges (polygon) of vertices类似,但我需要它来处理非凸多边形的情况。

编辑: 澄清:下图是凹多边形。这就是我所说的非凸。如果我对它运行凸包算法,它将不会保留多边形的凹陷部分。(除非我弄错了)。

concave polygon

我在多边形的边框内和边框上有一组顶点:[[x1,y1],[x2,y2] ...] 我想减少集合,以便顶点只是形状的边框轮廓。

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

您的描述有点模糊,但您可能正在寻找算法来构造一组点的Convex Hull。简单地说,如果在所有顶点周围放置橡皮筋,凸包就是你得到的形状 在2D中编写凸包算法并不是非常困难,并且有一些库像qhull

那样执行它

(在您链接到的问题中也给出了答案,这似乎是您问题的特例)

答案 2 :(得分:0)

这是一个古老的,可能被遗弃的问题,但它让我思考它。你不是在寻找一个凸包,你想要保持多边形的形状,而只是摆脱沿着一条线的“边缘”之间的点。

解决方案可以是逐步通过相邻点并计算第一个和第二个的线性斜率,然后保存该斜率值,计算第二个和第三个的斜率,如果pt1-pt2的斜率等于pt2-pt3然后pt2在形成线时是多余的,因此可以被移除。继续循环,直到你回到pt1。

这将确保您的凹形保持不变,但不相关的额外点将被删除。

答案 3 :(得分:0)

您要查找的术语是凹面船体

问题的最简单形式不能像凸包一样得到很好的定义,因为覆盖给定点的凹多边形不是唯一的。但是,有很多好的方法。

最简单的方法之一是,您使用礼物包装算法,但不考虑每一步的所有点,而只考虑当前顶点的 k 个最近邻居。

此处 k 是您要调整的超参数。如果 k 太高,则会得到凸包。如果 k 太低,则您产生的多边形具有很多凹度。


以下是一些相关链接: