我得到了一个三角形网格中的三角形列表,如下所示:
__________________
/\ /\ /\
\ / \ /
\ / \ /
____\/______\/____
/\ /\
/ \ / \
/ \ / \
\/______\/______\/
/\ /\ /\
\ / \ /
\ / \ /
____\/______\/____
三角形可以存在与否。我需要在三角形周围找到一条路径,如:
========
\\ /\\
\\ / \\
\\ / \\
\\/______\\========
\\ /\ //
\\ / \ //
\\ / \ //
\\/======\//
我需要在三角形周围按顺时针顺序获得粗线。我可以用什么算法来获取它?我已经可以使用不相交集将三角形分类为组,但我不知道如何获取组中的路径。
答案 0 :(得分:4)
一个孤立的三角形有三条线围绕它。如果在它旁边添加另一个三角形,则会在它们合并时丢失一条线,并从新三角形中获得另外两条线。因此,您可以跟踪一组线条,这些线条显示为彼此相邻的一组三角形的边界,您还可以跟踪这些线条中的哪一条线与其他线条相交。
我在这里假设只共享一个边界连接一个组中的两个三角形,而不是共享一个点。线条在某一点相遇,如果仅共享边界计为连接两个三角形,则每条外线在其每个端部仅与另一条外线连接。
如果您遵循(例如,使用深度优先搜索)形成的图形,其中节点是线条,线条之间的链接显示线条与另一条线条相邻的位置,您将跟踪线条的循环 - 它不会比因为任何一条线最多会遇到另外两条线,每条线都有一条线。
如果你的三角形组中没有孔,那么你将检索一个单独的循环,这是它的外边界。如果三角形组中有孔,您将检索外边界和每个孔的循环。外边界必须是包含最大区域的循环,因为它包含所有的孔。
答案 1 :(得分:1)
迭代遍历每个三角形,并检查三角形的每一边是否接触另一个三角形;如果不是只是让方大胆。
修改
如果您需要一个动画显示以顺时针方式绘制的线条,只需计算要绘制的所有边,然后按极角对线进行排序并按此顺序显示