将点列表排序为多边形

Posted

技术标签:

【中文标题】将点列表排序为多边形【英文标题】:Sort point list into polygon 【发布时间】:2010-09-20 22:19:04 【问题描述】:

我有一组点。这组点确实定义了一个(非凸)多边形,但它没有排序。

由于它不是有序的,我不能只是从点到点绘制来绘制它的边界。如何以可以遍历此点列表并绘制多边形的方式对其进行排序?

我的第一个想法是使用凸包,但我的多边形大部分时间都是凹的。

【问题讨论】:

当你说“一组多边形”是指一组点吗? @Beta 是的。谢谢,我已经更正了。 【参考方案1】:

我认为对此没有明确的解决方案。考虑如下五点:

.   .
  .
.   .

这里什么多边形是正确的?

【讨论】:

【参考方案2】:

您必须对这些点进行排序,这样当您从一个点移动到另一个点时,您可以在左侧(或右侧)内部围绕多边形走动。凸或凹,这才是正确的做法。

但知道要点是不够的。您还必须知道每个边缘段的连通性。知道了这一点,您就可以从任意点开始,沿着外围走,直到再次到达起点。

【讨论】:

【参考方案3】:

我不确定这是最快的方法,但它似乎有效。

整个想法是使用不相交的线段连接点(除了在点处,这比您想象的要复杂一些)。所以从原始的未排序列表开始,将它们按顺序连接起来——形成一条可能有许多交叉点的封闭路径——然后通过反转列表中点的子序列来逐个消除交叉点。

假设我们从 [a b c d e f g h] 开始,发现 b-c 边与 g-h 边相交。我们反转 c-g 序列以获得一个新列表:[a b g f e d c h]。删除了两条边,并创建了两条新边;其余的则不受干扰(尽管有些方向相反)。

我无法找到该进程将永远运行的情况(即,列表将返回到以前的状态),也无法证明这不会发生。

【讨论】:

以上是关于将点列表排序为多边形的主要内容,如果未能解决你的问题,请参考以下文章

初学计算几何——初识凸包

QGIS入门实战精品教程4.4:QGIS如何将点自动连成线线生成多边形?

7-8 对称图形的面积 (25分)

在python中生成多边形范围内的随机点数

将几何多边形内部表示提升为 STL 列表?

如何将 R 列表转换为多边形