Algorithm 查找大致二维网格的轮廓

Algorithm 查找大致二维网格的轮廓,algorithm,graph,graphics,geometry,computational-geometry,Algorithm,Graph,Graphics,Geometry,Computational Geometry,我有一个大致的平面网格,我想找到它的轮廓。为了找到轮廓,我在网格的所有三角形中循环,并计算每个边的出现次数(由无序的顶点对表示) 检查所有三角形后,每条边只有两个可能的值 边计数=1:边属于单个三角形,因此它是一条外边 边缘计数=2:边缘在两个用户之间共享 三角形,所以它是一个内边界 属于单个三角形(边数=1)的边定义网格轮廓 如果不是为了某个问题,这个策略非常有效,我将尝试用一个例子来说明。假设我们想要找到以下网格的轮廓 如果我们将上述策略应用于此网格,它将找到定义轮廓的七条边,即(0,

我有一个大致的平面网格,我想找到它的轮廓。为了找到轮廓,我在网格的所有三角形中循环,并计算每个边的出现次数(由无序的顶点对表示)

检查所有三角形后,每条边只有两个可能的值

  • 边计数=1:边属于单个三角形,因此它是一条外边
  • 边缘计数=2:边缘在两个用户之间共享 三角形,所以它是一个内边界
属于单个三角形(边数=1)的边定义网格轮廓

如果不是为了某个问题,这个策略非常有效,我将尝试用一个例子来说明。假设我们想要找到以下网格的轮廓

如果我们将上述策略应用于此网格,它将找到定义轮廓的七条边,即(0,1)、(1,4)、(4,7)、(6,7)、(5,6)、(2,5)和(0,2),但它也将找到三条内边,即(2,3)、(3,4)和(2,4),它们分别属于一个三角形(2,3,6)、(3,4,7)和(0,2,4)

我想到了以下解决问题的方法。就我所知,只有当有三个顶点位于上述示例中的同一条线上时,问题才会出现。连接三个顶点的两条短边可以替换为连接两个外部顶点的一条较长边。此新边将添加到边列表中,或者如果已存在,则其计数器将增加1,达到值2。迭代该过程(按照边定义的路径),我应该简化边列表,最后只有网格轮廓上的边应该有计数1


你觉得我的方法怎么样?谢谢。

2-3-4配置是“病态的”,因为它破坏了图形结构。事实上,这可以看作是网格中的三角形孔


一种可能的处理方法是列出所有单条边,检测重叠的边并忽略它们。

imo最简单的解决方案是列出具有共享边的n边,然后仅附着1条n边的共享边就是边界边。用n角代替三角形,这就是为什么很多人试图避免t形交叉的原因之一。您是否仅限于手头的网格,或者是否可以对其进行修改(按照@flatterish的建议引入四边形或分割三角形)?