获取三角形的路径

时间:2011-09-04 14:42:34

标签: algorithm

我得到了一个三角形网格中的三角形列表,如下所示:

__________________
/\      /\      /\
  \    /  \    /
   \  /    \  /
____\/______\/____
    /\      /\
   /  \    /  \
  /    \  /    \
\/______\/______\/
/\      /\      /\
  \    /  \    /
   \  /    \  /
____\/______\/____

三角形可以存在与否。我需要在三角形周围找到一条路径,如:

 ========
\\      /\\
 \\    /  \\
  \\  /    \\
   \\/______\\========
    \\      /\      //
     \\    /  \    //
      \\  /    \  //
       \\/======\//

我需要在三角形周围按顺时针顺序获得粗线。我可以用什么算法来获取它?我已经可以使用不相交集将三角形分类为组,但我不知道如何获取组中的路径。

2 个答案:

答案 0 :(得分:4)

一个孤立的三角形有三条线围绕它。如果在它旁边添加另一个三角形,则会在它们合并时丢失一条线,并从新三角形中获得另外两条线。因此,您可以跟踪一组线条,这些线条显示为彼此相邻的一组三角形的边界,您还可以跟踪这些线条中的哪一条线与其他线条相交。

我在这里假设只共享一个边界连接一个组中的两个三角形,而不是共享一个点。线条在某一点相遇,如果仅共享边界计为连接两个三角形,则每条外线在其每个端部仅与另一条外线连接。

如果您遵循(例如,使用深度优先搜索)形成的图形,其中节点是线条,线条之间的链接显示线条与另一条线条相邻的位置,您将跟踪线条的循环 - 它不会比因为任何一条线最多会遇到另外两条线,每条线都有一条线。

如果你的三角形组中没有孔,那么你将检索一个单独的循环,这是它的外边界。如果三角形组中有孔,您将检索外边界和每个孔的循环。外边界必须是包含最大区域的循环,因为它包含所有的孔。

答案 1 :(得分:1)

迭代遍历每个三角形,并检查三角形的每一边是否接触另一个三角形;如果不是只是让方大胆。

修改

如果您需要一个动画显示以顺时针方式绘制的线条,只需计算要绘制的所有边,然后按极角对线进行排序并按此顺序显示

相关问题