用于从一组相邻三角形创建多边形的算法

时间:2015-08-21 23:05:19

标签: algorithm geometry polygon triangulation

假设你有一组三角形,如下图所示,其中黑色是三角形边,红色是三角形,绿色是需要找到的多边形,蓝色是多边形&#39 s点。

triangle

所描述的多边形可以是凹的,也可以不是凹的。它中的三角形将始终相邻(与集合中的其他三角形共享所有三个点)。 生成这样一组三角形描述的多边形有哪些算法?多边形应采用顺时针或逆时针顺序的点列表形式。

2 个答案:

答案 0 :(得分:1)

如何关注一个简​​单的GrahamScan Algo ......这应该是诡计。

答案 1 :(得分:-1)

假设您有N个不同的点Pi和M三角形。我们通过3个索引i,j和k来定义每个三角形。每个三角形将具有3个边缘,定义为E(i,j),E(j,k)和E(i,k)。找到“多边形”的方法如下:

1)循环通过所有三角形。对于每个三角形,将3个边添加到集合中。具有两个相同点指数的边应该被视为相同的边。即,E(i,j)= E(j,i)。遇到这种情况后,从集合中移除E(i,j)和E(j,i),因为这些是内部边缘。
2)集合中的剩余边缘应该是形成多边形的边缘。
3)通过点索引对集合中的边缘进行排序,如下所示:

(3a)从集合中挑选任何边,比如说E(i,j)。
 (3b)将索引i和j添加到std :: vector中,然后从集合中删除E(i,j)  (3c)从集合中找到共享std :: vector中最后一个点索引的边(现在是j)。将此边缘表示为E(j,k)。将索引k添加到std :: vector中并从集合中删除E(j,k)。
 (3d)重复步骤(3c),直到该组不包含边。 std :: vector中的点索引将是多边形的点顺序。

如果三角形顶点只有M个三角形和3 * M(x,y)值,则需要进行一些预处理以删除相同的点,并根据点索引重新定义三角形如上所述。