作为输入,我有一组三角形,它们形成带孔的凹网格。每个三角形由三个顶点组成:(vi,vj,vk)不提供邻接信息。算法必须将具有相同法向的三角形集合“并集”成多边形。所以输出是(pi,pj,pk,…,ps),。。。
例如(见下图),假设我们有由三角形组成的网格
(v0,v1,v4),(v1,v3,v4),(v1,v2,v3)
(v2,v6,v4),(v6,v5,v4)。
作为输出,我们有:
(p0,p1,p4)
(p1,p2,p3,p4)
我在寻找解决上述问题的有效算法。任何建议,提示或文章都是值得赞赏的。

最佳答案

看看自适应网格粗化算法这些通常用于计算流体动力学(Ansys CFXCD-Adapco Star CCM+等)的高级软件/结构动力学(anasys等人)。其中,对给定网格的自动细化和粗化是有利的。
一些免费的论文可以让你在这个问题上有一个很强的起点:
https://cfwebprod.sandia.gov/cfdocs/CCIM/docs/coarsening.pdf
http://tetra.mech.ubc.ca/ANSLab/publications/coarsen.pdf
http://www.cs.cmu.edu/~glmiller/Publications/MiTaTe98.pdf(这相当数学化)
google在自适应网格细化算法领域的额外搜索将揭示关于该主题的类似论文。
编辑自适应网格协同的一种基本方法是边折叠方法,它将一个边减少到一个顶点,从而删除两个元素。李旭,谢泼德M.S.,比亚尔M.W.“网格修改的三维各向异性网格适配”,《应用力学与工程的计算机方法》,2004年。有一个很大的粗化算法,在伪代码中定义为

for all edge in short edge list do
    for all vertex that bounds the current edge do
        if vertex is not yet tagger then
            append vertex to dynamic list
            tag vertex to be in dynamic list
        end if
    end for
end for
while vertices not tagged processed in dynamic list do
    get an unprocessed vertex Vi from the list
    get Ej , the shortest mesh edge in transformed space connected to Vi
    if the transformed length Ej is greater than Llow then
        remove Vi from the dynamic list
    else
        evaluate edge collapse operation of collapsing Ej with Vi removed
        if the edge collapse would create an edge longer than Lmax then
            evaluate relocated vertex Vi
        else if the edge collapse would lead to
            at/inverted elements then
            evaluate the swaps(s)/collapse compound operation
        end if
        if any local mesh modication is determined then
            tag neighbouring vertices of Vi in the dynamic list as unprocessed
            apply the local mesh modication
            remove Vi from the dynamic list if it is collapse
        else
            tag Vi as processed
        end if
    end if
end while

这是从一个令人印象深刻的硕士论文,我在过去使用。可以找到here
我希望这能有帮助。

关于algorithm - 分割的逆任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10928383/

10-12 22:31