欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
参考论文:Q-Morph an indirect approach to advancing front quad meshing
三角网格初始化
理论上任何三角化方法都可以用来初始化,但最终的四边形网格会因初始三角网格不同而有些不同。为了用四边形充分表示几何图形,初始三角形必须具有足够的密度,以表示模型特征和曲面曲率。长宽比过高的三角形也可能导致较差的四边形。在实践中,“Advancing Front Surface Mesh Generation in Parametric Space Using a Riemannian Surface Definition” 使用参数空间、考虑曲面曲率进行三角化。
底边初始化
对区域进行三角剖分后,需要先初始化Front队列。通过遍历所有的网格边界,收集所有边界作为初始Front队列。每条边有一个边方向属性和面方向属性。边方向沿着三角形逆时针方向确定。该边相邻三角形与边的方向关系确定了面方向。方向属性有助于进行局部拓扑查询,例如确定元素邻接点和前面邻接点(具体可以参考三角网格半边数据结构)。
底边分类
边的分类由状态(state)决定。
状态是两个二进制数组成,分别由该边与左右相邻的边组成的角度决定。
如果小于3π/4则为1,否则为0。
状态一共有4种,0-0, 1-0, 0-1, 1-1。
状态的定义有两个作用:1)标记边的哪一端需要生成侧边,如果状态为0则需要生成侧边。2)定义了边的处理顺序,按照1-1,0-1, 1-0, 0-0的顺序处理边。
角度计算
为了生成边的状态,算法中需要用到大量的角度计算。
对于二维的角度,直接计算两条线段的角度即可。
对于三维的角度,需要把围绕角顶点的所有角度加起来。
α k = ∑ i = 1 n α i , α i = c o s − 1 ( A i ⋅ B i ∥ A i ∥ ⋅ ∥ B i ∥ ) \alpha_k = \displaystyle \sum_{i=1}^n \alpha_i, \alpha_i=cos^{-1}\left (\frac {\boldsymbol {A_i}\cdot \boldsymbol {B_i}}{\|\boldsymbol {A_i}\|\cdot \|\boldsymbol {B_i}\|} \right) αk=i=1∑nαi,αi=cos−1(∥Ai∥⋅∥Bi∥Ai⋅Bi)
本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接,帮忙转发,感激不尽。