【问题标题】:Unordered cloud point of polygon contour to polygon多边形轮廓到多边形的无序云点
【发布时间】:2015-03-30 11:49:59
【问题描述】:

尊敬的 Stackoverflow 社区,

我有不规则多边形的轮廓作为无序数据点(就像这里的图:https://s16.postimg.org/pum4m0pn9/figure_4.png),我正在尝试对它们进行排序(即创建一个多边形)。

由于多边形的非凸形状,我无法使用凸包包络。我不能作为最小距离标准,因为轮廓其他部分的某些点更靠近(例如:点 A 必须与 B 连接,但更靠近 C)。由于轮廓形状不规则,我不能使用顺时针排序。

有没有人知道一种方法来实现(最好是在 Python 中)一种从起点重新排序数据点的算法?

【问题讨论】:

  • 问题是您通过点的顺序可以定义不同的多边形,因此一般没有唯一的解决方案。
  • 你看过python的shapely模块吗?它具有许多多边形等功能。也许你会发现你的需求已经在那里实现了......pypi.python.org/pypi/Shapely
  • 您的问题类似于“旅行推销员问题”。多年前,我用“模拟退火”解决了这个问题。实现它应该很简单。
  • 看这里finding holes in 2D point set 了解如何解决这个问题的一些想法

标签: python geometry 2d polygon computational-geometry


【解决方案1】:

查看这里finding holes in 2D point set 了解有关如何解决此问题的一些想法

  1. 我会创建点密度图(类似于上面链接的答案)
  2. 创建所有行的列表
    • 所以添加所有可能的线组合(在闭合点之间)
    • 不与地图中的空白区域相交
  3. 删除所有相交线
  4. 对线路应用闭环/连通性分析
  5. 然后处理其余未使用的点
    • 通过它们分割最近的线...
    • 根据您的地图网格大小和点密度,您可能需要混合/平滑地图以覆盖空白
    • 如果网格尺寸太大,您可能会错过 A、C 点之间图像上的细节
    • 如果它太小,那么在低密度区域附近可能会出现明显的间隙

但正如所说,这有不止一个解决方案,因此您需要稍微调整一下以使想要的输出可能是一些用户输入,以便稍微摇动解决方案,直到找到想要的解决方案......

[注释]

您可以将其处理为更多的凸多边形 ...

  • 仅在满足缠绕规则时添加行
  • 找不到更多行时停止
  • 从未使用的积分重新开始
  • 最后尝试连接找到的非封闭多边形...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 2021-10-29
    • 1970-01-01
    • 2012-09-19
    • 2022-07-12
    • 2020-10-31
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多