Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Polygon_Graph Theory_Computational Geometry - Fatal编程技术网

Algorithm 给定面信息,如何有效地检查由三角形组成的多面体是否闭合?

Algorithm 给定面信息,如何有效地检查由三角形组成的多面体是否闭合?,algorithm,polygon,graph-theory,computational-geometry,Algorithm,Polygon,Graph Theory,Computational Geometry,让我先澄清一下定义。考虑正则四面体是由4个顶点组成的。假设这些顶点的索引是[0,1,2,3]。然后,刻面信息的定义是F=[[0,1,2],[0,2,3],[0,3,1],[1,2,3]如果任何三角形面通过边连接到其他3个三角形,则由三角形组成的多面体是闭合的。例如,正四面体是闭合的 然后,给定面信息,如何有效地检查由三角形组成的多面体是否闭合 一个简单的解决方案如下:制作一个描述方面之间无序连接的图,然后检查任何节点是否连接到其他3个节点。然而,对于我的应用程序来说,这种幼稚的方法似乎太慢了 另

让我先澄清一下定义。考虑正则四面体是由4个顶点组成的。假设这些顶点的索引是[0,1,2,3]。然后,刻面信息的定义是
F=[[0,1,2],[0,2,3],[0,3,1],[1,2,3]
如果任何三角形面通过边连接到其他3个三角形,则由三角形组成的多面体是闭合的。例如,正四面体是闭合的

然后,给定面信息,如何有效地检查由三角形组成的多面体是否闭合

一个简单的解决方案如下:制作一个描述方面之间无序连接的图,然后检查任何节点是否连接到其他3个节点。然而,对于我的应用程序来说,这种幼稚的方法似乎太慢了

另外,我在python中比较边数和顶点数的实现

defsclosed(F):#F是索引三元组列表
S=集合()
对于F中的三重态:
对于[0,1],[1,2],[2,0]]中的i,j:
a、 b=三重态[i],三重态[j]
键=(a,b)如果a
“如果任何三角形面通过边连接到其他3个三角形,则由三角形组成的多面体是闭合的”。重申“如果每个边都存在于至少一个三角形中,且恰好存在于两个三角形中,则由三角形组成的多面体是闭合的”,这是有效的吗?我认为这是等价的。在这种情况下,计数集应该起作用。边的总数是三角形数的3倍。重复的边数必须为总边数的一半。(所以很快,奇数个三角形就不起作用了。)对于每个三角形,将其边添加到计数集中。当边的重复计数达到2时,增加匹配数。如果边的重复计数达到3,则立即失败。处理完所有三角形后,匹配数应该是边的总数除以2。我认为
len(F)*3==len(S)*2
不够。即使存在不匹配的边,如果某些边出现3次或更多次,也可以满足该条件。改进方法是消除
i,j
循环。如果对每个三角形中的顶点进行排序,也会有所帮助。然后你可以做
S.add((三元组[0],三元组[1])
,然后再做两行类似于0,2和1,2的代码。