Computational geometry 一组边的最外层多边形
假设我有一组全部连接的二维线段。我需要一个算法来找到集合中最外层的线段。也就是说,限定相同区域的最小子集 注意:这与查找组成线段的点的凸包不同 编辑: 顶部是初始段集。 下面是删除了内部线段的同一轮廓。Computational geometry 一组边的最外层多边形,computational-geometry,line-segment,geometry-class-library,Computational Geometry,Line Segment,Geometry Class Library,假设我有一组全部连接的二维线段。我需要一个算法来找到集合中最外层的线段。也就是说,限定相同区域的最小子集 注意:这与查找组成线段的点的凸包不同 编辑: 顶部是初始段集。 下面是删除了内部线段的同一轮廓。 (忽略灰色的小十字架,它们只是用来标记交叉点。)以下是一种从开始,然后向内的方法。直觉是从外壳上的边开始,然后通过沿边集中的最短路径“沿”间隙查找最近点来填充间隙 计算点的凸包 将外壳线集与边集相交。这将给您留下一系列可能断开连接的边缘路径 通过在原始边集中查找最短路径,将没有两条边(即图中的a
(忽略灰色的小十字架,它们只是用来标记交叉点。)以下是一种从开始,然后向内的方法。直觉是从外壳上的边开始,然后通过沿边集中的最短路径“沿”间隙查找最近点来填充间隙
给定一个三角形非凸多边形,可以指定顶点的遍历方向(逆时针方向)。使所有三角形的方向与其顶点的WRT遍历方向相似。将所有三角形分解为有向边。每个三角形的每条边都是两个顶点的元组
(a,b)
。对于每个相邻三角形,有两条反向边(a,b)
和(b,a)
。您可以简单地从进一步考虑中排除这样一对边。最后,您将获得一组独占的外边缘
如果多边形由非简单部分组成,则不会失去通用性(但仍然可以指定顶点的遍历方向)
对多边形构造的源段进行三角剖分是一个明显的步骤:将顶点拉伸到$d+1$抛物面上并进行三角剖分,然后排除至少包含一条与任何源段都不匹配的边的三角形
另一种可能的方法是稍加修改。你用铅笔怎么做
所以你有一个复杂的多边形,你想把它缩小到它的外边界?例如,如果你把一个五角星放进去,你会把五个部分放进去,然后把十个部分放出来,描述轮廓?不。请看我用所附示例所做的编辑。明白了。它是被边缘完全包围的每个点的轮廓?这些边肯定是原始边的子集吗?你能保证没有相交的线段吗?是的,是的。对于特定的应用,这两种情况都是正确的。您的图形是矢量化的还是光栅化的?添加到问题中的图像表明多边形是三角形的,但描述并不能保证这一点。