【问题标题】:Detect tetrahedra within a triangulated mesh?在三角网格中检测四面体?
【发布时间】:2012-12-31 08:55:20
【问题描述】:

假设我有一个网格,它有连接顶点的线,可以将其分割成四面体。在给定顶点和线的情况下,是否有一种算法可以用来检测四面体的存在? (即给定带有连接线的网格,输出一组具有相同形状和体积的四面体。)

编辑:四面体不允许相交。

【问题讨论】:

  • 那么你是说形成四面体所需的所有边都已经作为一组线出现了??
  • 是的,边缘已经存在。
  • 你有什么形式的顶点和边?
  • 有一个顶点数组 [x, y] 和一个线数组 [顶点数组中的起点索引,顶点数组中的终点索引]。
  • 顶点是 [x,y,z] 对吧?我们不能谈论二维中的四面体。

标签: algorithm math 3d geometry mesh


【解决方案1】:

我认为基于图形的方法可能会奏效。

首先,可以通过注意一组边定义了一个无向图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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2011-05-20
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多