Algorithm 三角形条带顶点到多边形的转换算法

Algorithm 三角形条带顶点到多边形的转换算法,algorithm,opengl,polygon,triangulation,Algorithm,Opengl,Polygon,Triangulation,我有一个数组,它的顶点代表一个三角形的条带。 我需要把它转换成多边形。 有很多方法可以做相反的事情,但是我没有找到一个解决上述问题的方法。 或者太简单了,我就是看不见。 请帮忙 OpenGL=兼容,请参阅 例如: 这条带子 我需要输出一个B D F E C或一个C E F D B如果您的形状具有特别简单的结构,可能会有一个快捷方式,但一般来说,我认为您需要执行以下操作 从三角形列表中创建顶点和边的列表。这涉及到检测共享点(希望它们是精确匹配的,这样你就可以通过散列而不是模糊搜索来找到它们)和

我有一个数组,它的顶点代表一个三角形的条带。 我需要把它转换成多边形。 有很多方法可以做相反的事情,但是我没有找到一个解决上述问题的方法。 或者太简单了,我就是看不见。 请帮忙

OpenGL=兼容,请参阅

例如: 这条带子
我需要输出一个B D F E C或一个C E F D B

如果您的形状具有特别简单的结构,可能会有一个快捷方式,但一般来说,我认为您需要执行以下操作

  • 从三角形列表中创建顶点和边的列表。这涉及到检测共享点(希望它们是精确匹配的,这样你就可以通过散列而不是模糊搜索来找到它们)和共享线(这很容易——只是不要在同一对共享顶点之间绘制两条边)
  • 找到最左上角的点
  • 找到沿逆时针方向尽可能左上方移动的边
  • 走到下一个顶点
  • 尽可能多地找到上一条加倍的下一条边
  • 继续前进,直到你再次击中左上角的最高点

我认为以下方法应该有效:

浏览顶点列表。将第一个点添加到多边形。推动堆栈上的第二个点。将第三个点添加到多边形。继续在堆栈上的推动点之间交替,并将它们添加到多边形中,直到到达列表的末尾。到达列表末尾时,弹出堆栈的点并将其添加到多边形中。

我假设三角形条总是以相同的方式连接(我相信OpenGL也是如此)

  • “底部”顶点始终为两个 A、C、E、
  • “顶端” 顶点总是两个分开的:B,D, F、
取“底部”列表,并在“顶部”列表的背面追加。(以ACEFDB为例)


或者,更直接地说,使用从零开始的索引而不是字母:

// do "bottom"
for ( i = 0; i < N; i += 2 )
  addVertex( i )

// do "top"
largestOddNumberLessThanN = N % 2 == 0 ? N - 1 : N - 2;
for ( i = largestOddNumberLessThanN; i >= 0; i -= 2 )
  addVertex( i )
//做“底部”
对于(i=0;i=0;i-=2)
addVertex(一)

你所说的“三角带”是什么意思?它是由三角形构成的任意形状吗?或者更具体一些?这是针对“三角形条带”,而不是“三角形条带”。tristrip是一种数据格式,它只使用三角形+2个顶点指定三角形列表,因为第一个三角形之后的每个三角形都使用前一个三角形的最后两个顶点。@belisarius:它不试图“简化”多边形,如果这就是你的意思,也就是说,它将创建一个与三角形条的轮廓完全匹配的多边形。例如,如果你把一个曲面细分成一个绕着很多圈的长三角形条带,它将生成一个以完全相同的方式绕着的多边形。至少如果你使用的是三维空间,你不能做太多其他的事情——内部点通常有不同的Z值需要保留。是的。我以为这就是这次行动的目的。也许我错了。Tnx.为了简化多边形,请统一相等顶点的名称,然后浏览循环列表,将图案ABA替换为A,直到无法再替换为止。@belisarius-三角形条上没有内部点。@dash tom bang是的,我在发表评论很久之后就明白了这一点。非常感谢。