Computational geometry 一组边的最外层多边形

Computational geometry 一组边的最外层多边形,computational-geometry,line-segment,geometry-class-library,Computational Geometry,Line Segment,Geometry Class Library,假设我有一组全部连接的二维线段。我需要一个算法来找到集合中最外层的线段。也就是说,限定相同区域的最小子集 注意:这与查找组成线段的点的凸包不同 编辑: 顶部是初始段集。 下面是删除了内部线段的同一轮廓。 (忽略灰色的小十字架,它们只是用来标记交叉点。)以下是一种从开始,然后向内的方法。直觉是从外壳上的边开始,然后通过沿边集中的最短路径“沿”间隙查找最近点来填充间隙 计算点的凸包 将外壳线集与边集相交。这将给您留下一系列可能断开连接的边缘路径 通过在原始边集中查找最短路径,将没有两条边(即图中的a

假设我有一组全部连接的二维线段。我需要一个算法来找到集合中最外层的线段。也就是说,限定相同区域的最小子集

注意:这与查找组成线段的点的凸包不同

编辑: 顶部是初始段集。 下面是删除了内部线段的同一轮廓。
(忽略灰色的小十字架,它们只是用来标记交叉点。)

以下是一种从开始,然后向内的方法。直觉是从外壳上的边开始,然后通过沿边集中的最短路径“沿”间隙查找最近点来填充间隙

  • 计算点的凸包
  • 将外壳线集与边集相交。这将给您留下一系列可能断开连接的边缘路径
  • 通过在原始边集中查找最短路径,将没有两条边(即图中的a)的任何点连接到其最近的叶
  • 任何系带都可以通过一条路径断开,该路径在被船体封闭时形成最小的区域

  • 给定一个三角形非凸多边形,可以指定顶点的遍历方向(逆时针方向)。使所有三角形的方向与其顶点的WRT遍历方向相似。将所有三角形分解为有向边。每个三角形的每条边都是两个顶点的元组
    (a,b)
    。对于每个相邻三角形,有两条反向边
    (a,b)
    (b,a)
    。您可以简单地从进一步考虑中排除这样一对边。最后,您将获得一组独占的外边缘

    如果多边形由非简单部分组成,则不会失去通用性(但仍然可以指定顶点的遍历方向)

    对多边形构造的源段进行三角剖分是一个明显的步骤:将顶点拉伸到$d+1$抛物面上并进行三角剖分,然后排除至少包含一条与任何源段都不匹配的边的三角形


    另一种可能的方法是稍加修改。

    你用铅笔怎么做

  • 找到最左边的顶点(最小x)。如果有多个,请选择其中最低的一个(最小y)。当前顶点下方没有顶点,因此以“向下”方向为参照
  • 找到从当前顶点开始的所有边并计算它们的方向(方向角)。找到与参考方向成最小正角度(逆时针)的方向。这将是大纲部分
  • 选择其另一端作为新的“当前”顶点,并将从该顶点到最近顶点的方向设置为新的参考方向
  • 从步骤2继续,直到到达起始顶点
  • 删除所有未访问的段
  • 删除所有孤立顶点(如果步骤5中出现)

  • 所以你有一个复杂的多边形,你想把它缩小到它的外边界?例如,如果你把一个五角星放进去,你会把五个部分放进去,然后把十个部分放出来,描述轮廓?不。请看我用所附示例所做的编辑。明白了。它是被边缘完全包围的每个点的轮廓?这些边肯定是原始边的子集吗?你能保证没有相交的线段吗?是的,是的。对于特定的应用,这两种情况都是正确的。您的图形是矢量化的还是光栅化的?添加到问题中的图像表明多边形是三角形的,但描述并不能保证这一点。