OpenCASCADE曲面求交之网格离散法3
1 Introduction
由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用平面片求交法求得的交线,并以此交线近似代表曲面间的交线。这种方法原理简明,便于实现,适用范围广,任意参数曲面均可利用该法求交。但为获取精确地交线,则必须生成非常细密的网格,这将导致占用内存多,计算花费大。因此,实际工作中很少单一使用离散网格法,而常将其与其他方法结合使用。
OpenCASCADE中对于曲面求交也提供离散网格法,其中曲面的离散网格由类IntPatch_Polyhedron表示,两个网格面求交使用类IntPatch_InterferencePolyhedron。在实际计算两个面相交时并没有使用这个类,而是使用类IntPolyh_Intersection,而离散网格使用类IntPolyh_MaillageAffinage。
2 网格离散
使用类IntPolyh_MaillageAffinage主要用来生成曲面的网格,其中MaillageAffinage是法语,翻译过来是Mesh Refining网格细化,网格精度主要是通过参数U,V方向上的采样点数量来确定。当不指定采样点数量时,默认是参数U,V方向分别10个,即默认会生成10x10个采样点,即使是平面也是生成100个采样点。通过函数FillArrayOfPnt()生成采样点。通过函数FillArrayOfTriangles()来生成三角形,三角形的数量通过如下图所示公式计算,默认数量 为2x(10-1)x(10-1)=162。
对于简单的平面,如果不指定采样点数量,也会生成100个采样点及162个三角形:
3 网格求交
两个网格求交是通过类IntPolyh_Intersection来计算,计算的结果也是两个网格之间的交线。还是将交线显示出来便于观察:
从生成的交线来看,这个结果要比IntPatch_InterferencePolyhedron要好,没有多余的交线。类IntPolyh_Intersection中使用BVH来过滤不相交的三角形,所以速度也会快很多。
4 Conclusion
综上所述,使用类IntPolyh_Intersection来计算两个曲面网格的交线。曲面网格生成直接通过参数U,V上的采样点数量来确定,虽然生成网格速度快,但是精度控制不好,即使是平面也会根据采样数量生成大量采样点和三角形,影响求交速度。网格求交作为曲面求交的预处理步骤,如何用更少的三角形来表示曲面,可提高网格求交性能。
标签:求交,采样,网格,离散,交线,OpenCASCADE,曲面 From: https://www.cnblogs.com/opencascade/p/occt_IntPolyh_Intersection.html