Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 获取三角形周围的路径_Algorithm - Fatal编程技术网

Algorithm 获取三角形周围的路径

Algorithm 获取三角形周围的路径,algorithm,Algorithm,我得到了三角形网格中的三角形列表,如下所示: __________________ /\ /\ /\ \ / \ / \ / \ / ____\/______\/____ /\ /\ / \ / \ / \ / \ \/______\/______\/ /\ /\ /\ \ / \ / \ / \ / ____\/______\/____

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

__________________
/\      /\      /\
  \    /  \    /
   \  /    \  /
____\/______\/____
    /\      /\
   /  \    /  \
  /    \  /    \
\/______\/______\/
/\      /\      /\
  \    /  \    /
   \  /    \  /
____\/______\/____
三角形可以存在也可以不存在。我需要得到一条围绕三角形的路径,如:

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

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

只需迭代每个三角形,并检查三角形的每一侧是否与另一个三角形接触;如果不是的话,那就大胆一点

编辑


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

只需遍历每个三角形,并检查三角形的每一侧是否与另一个三角形接触;如果不是的话,那就大胆一点

编辑


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

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

这里我假设只有共享一个边界才能连接一个组中的两个三角形,而不共享一个点。直线在一个点相交,如果仅共享一个边界被视为连接两个三角形,则每条外线在其两端仅与另一条外线连接

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


如果您的三角形组内部没有孔,那么您将检索作为其外部边界的单个循环。如果三角形组中有孔,则将检索外部边界和每个孔的循环。外边界必须是包含最大面积的循环,因为它包含所有孔

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

这里我假设只有共享一个边界才能连接一个组中的两个三角形,而不共享一个点。直线在一个点相交,如果仅共享一个边界被视为连接两个三角形,则每条外线在其两端仅与另一条外线连接

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



如果您的三角形组内部没有孔,那么您将检索作为其外部边界的单个循环。如果三角形组中有孔,则将检索外部边界和每个孔的循环。外边界必须是包含最大面积的循环,因为它包含所有孔

三角形是如何用程序表示的?你需要在所有当前三角形之间有一条路径吗?@EvilTeach:一个布尔的二维数组。@Simone:不,我需要一条围绕所有相互接触的三角形的路径。我知道如何将所有三角形分割成相互接触的组,并且我需要分别围绕这些组的路径(为了示例,您可以只考虑一个组)。因此,数组中的每个元素都是一个点,这可能是或可能不是三角形的顶点。如果是真的,如果不是真的,则为假?三角形是如何以编程方式表示的?您需要所有当前三角形之间的路径吗?@EvilTeach:一个布尔的二维数组。@Simone:不,我需要一个围绕所有相互接触的三角形的路径。我知道如何将所有三角形分割成相互接触的组,并且我需要分别围绕这些组的路径(为了示例,您可以只考虑一个组)。因此,数组中的每个元素都是一个点,这可能是或可能不是三角形的顶点。如果是真的,如果不是真的,则为假?我想我错过了顺时针方向的要求..要求用户在绘制线条时看到它?这是必需的,这样我才能正确地绘制粗体线条。你是对的;但我认为我的思路是对的,我们只需要正确的排序算法,实际上比你想象的要容易;找到所有边段后,只需从其中一个边段开始,找到与它共享一个顶点的另一个边段,然后继续这样说很容易,但要通过它的顶点找到一条直线,意味着我需要使用另一个数据结构和更多内存(我已经缺少了)我想我错过了顺时针方向的要求。它要求用户在绘制线条时看到它?这是必需的,这样我才能正确地绘制粗体线条。你是对的;但我认为我的思路是对的,我们只需要正确的排序算法,实际上比你想象的要容易;找到所有边段后,只需从其中一个边段开始,找到与它共享一个顶点的另一个边段,然后继续这样说很容易,但要通过顶点找到一条直线,意味着我需要使用另一个数据结构和更多内存(我已经缺少了),知道如何寻址直线以知道直线是否