假设我有一个网格,其网格连接顶点的方式允许将其拆分为四面体。有没有一个算法可以用来检测给定顶点和直线的四面体的存在? (即,给定连接线的网格,输出一组具有相同形状和体积的四面体。)
编辑:不允许四面体相交。
答案 0 :(得分:0)
我认为基于图表的方法可能有用。
首先,通过注意边缘集定义几何顶点之间连通性的无向图G1(V1,E1)
,可以恢复三角形面的列表。三角形面在此图中为任意长度3个循环。
for (i = all vertices in G1)
// form list of vertex triplets
list = find all length 3 cycles from ith vertex
// push new faces onto output
for (j = all triplets in list)
[v1,v2,v3] = list(j)
if ([v1,v2,v3] is not an existing face)
push triplet [v1,v2,v3] as a new face
endif
endfor
endfor
接下来,可以通过形成定义面之间的连通性的无向图G2(V2,E2)
来恢复四面体(即,如果它们共享边缘,则面连接)。在该图中,四面体是任何长度为4个周期。
for (i = all vertices in G2)
// form a list of face tuples
list = find all length 4 cycles from ith vertex
// push new tetrahedra onto output
for (j = all tuples in list)
[f1,f2,f3] = list(j)
[v1,v2,v3,v4] = unique vertices in faces [f1,f2,f3]
if ([v1,v2,v3,v4] is not an existing tetrahedra)
push tuple [v1,v2,v3,v4] as a new tetrahedra
endif
endif
endfor
希望这有帮助。