作为输入,我有一组三角形,形成带孔的凹面网格。每个三角形由三个顶点组成:(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)
我正在寻找解决上述问题的有效算法。任何建议,提示或文章都表示赞赏。
答案 0 :(得分:2)
脱离我的头顶;
请注意,您还必须在TIN外壳的边缘处与NULL边缘类型竞争,但这很简单。
这里最慢的一点是开发邻接信息,可以通过许多优秀的TIN创建算法在O(n log n)中完成。
答案 1 :(得分:1)
查看自适应网格粗化算法。这些通常用于计算流体动力学的高级软件(Ansys CFX,CD-Adapco Star CCM+等)/结构动力学(Anasys等)。在给定网格的自动细化和粗化有利的情况下。
一些关于这个主题的免费论文,将给你一个强有力的起点:
https://cfwebprod.sandia.gov/cfdocs/CCIM/docs/coarsening.pdf
http://www.cs.cmu.edu/~glmiller/Publications/MiTaTe98.pdf(这是相当数学的)
自适应网格细化算法领域的其他Google搜索将揭示有关该主题的类似论文。
编辑。自适应网格粗化的基本且完善的方法是边缘折叠方法,其涉及将边缘减少到单个顶点,从而移除两个元素。 Li X.,Shephard M.S.,Beall 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
我希望这会有所帮助。