代码之家  ›  专栏  ›  技术社区  ›  tommy chheng

给定一个非凸多边形中的一大组顶点,如何才能找到边?

  •  10
  • tommy chheng  · 技术社区  · 15 年前

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

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

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

    编辑: 说明:下图是一个凹多边形。这就是我所说的非凸性。如果我在上面运行一个凸面外壳算法,它就不会保留多边形的凹面部分(除非我弄错了)。

    concave polygon

    我在多边形的内部和边界上有一组顶点:【x1,y1】,【x2,y2】…】 我想减少集合,使顶点只是形状的边界轮廓。

    4 回复  |  直到 6 年前
        2
  •  0
  •   shoosh    15 年前

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

    (该答案也在您所链接的问题中给出,而您所链接的问题似乎是您问题的特殊情况)

        3
  •  0
  •   softwarequestioneer    14 年前

    这是一个古老的,也许被抛弃的问题,但它让我开始思考。你不是在寻找一个凸面外壳,你想保持多边形的形状,但只是摆脱点之间的“边缘”沿一条线。

    解决方法可以是跨过相邻点,计算第一和第二的线性坡度,然后保存该坡度值,计算第二和第三个坡度,如果pt1-pt2的坡度等于pt2-pt3的坡度,则pt2在形成线时是多余的,因此可以是r。情绪激动。一直循环直到你回到PT1。

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

        4
  •  0
  •   nimcap    6 年前

    你要找的术语是 凹形船体 .

    这个问题最简单的形式并不像凸壳那样定义得很好,因为覆盖给定点的凹多边形不是唯一的。然而,有许多好的方法。

    最简单的方法之一是,使用礼品包装算法,而不是只考虑每个步骤中的所有点 K -当前顶点的最近邻居。

    在这里 K 是要优化的超参数。如果 K 太高了,你会得到凸面的外壳。如果 K 如果太低,则生成的多边形有很多凹面。


    以下是一些相关链接:

    推荐文章