朱心雄等著《自由曲线曲面造型技术》书中对曲面求交的迭代法有详细介绍,其中关于曲面迭代求交的原理介绍如下:为求得两个曲面精确的交点,Newton-Raphson迭代法得到广泛应用,该法的优点为
其缺点是对初始值要求较严格,初始值选择不当,可能导致迭代不收敛,也就无法得到精确的交点。
在曲面求交等问题中,一般可根据参与变化的参数数量将迭代法分为三参数迭代法和四参数迭代法两种类型。我们知道,一张参数曲面有两个参数,两张参数曲面共有四个参数变量。采用三参数迭代法时,两个曲面的四个参数中只有三个参数参与迭代过程,而保持另一个参数固定不变,这实际上就是计算不变参数的等参数线与另一张曲面的交点。采用四参数迭代法时,两张曲面的四个参数变量都参与迭代过程,四者都可能变化。两种迭代法各有其优缺点。在下述情况下以应用三参数迭代法为宜:
但对于一般交点,三参数法则未必适用。首先遇到的问题是在四个参数中选择何者作为不变参数,固定参数选择不当可能降低迭代收敛速度以至根本不收敛,或者破坏交线拓朴结构的正确性。迭代法本身不能够成独立的求交方法,主要在追踪法中使用,OpenCASCADE中曲面求交追踪法的类是IntWalk_PWalking。前面的blog已经介绍了曲面交求的离散网格法,和类IntWalk_TheInt2S实现原理,本文主要介绍OpenCASCADE曲面求交迭代法的类IntWalk_TheInt2S的用法结果。
前文介绍了曲面求交的离散网格法,使用类IntPolyh_Intersection来计算两个曲面网格的交线,计算结果是网格交线的一组交点。把离散网格的交点作为迭代法的输入,来检查一下迭代法的计算结果。
Newton迭代法的输入是初始估计点分别在两个曲面上的四个参数(u1, v1, u2, v2),及两个曲面aS1和aS2,迭代终止精度TolTangency。将计算结果输出,其中第一个距离是迭代的精确值与网格上交点的距离,第二个距离是精确交点的u1, v1, u2,v2分别在两个曲面上点的距离,可以看出经过Newton迭代计算后,根据精确交点的参数u1, v1, u2, v2计算出两个曲面上的点在指定的精度下是重合的。为了便于观察,将计算结果输出到DRAW中查看。
其中红色的线是两个曲面网格的交线,绿色的线是将网格交线经过Newton迭代后得到精确交线。再将两个交线与实际曲面一起显示来对比:
从图上可以看出,绿色的交线已经能比较准确地表达两个曲面之间的相交情况。比网格交线效果好。
综上所述,将曲面求交的离散网格交线作为Newton迭代法的初始估计点,可以得到较好的交线。后面再分析一下曲面求交的追踪法,看在追踪法中是如何使用离散网格交线数据的。对于一般的NURBS曲面求交,先用离散网格法或分割离散法求得交线和交点的估计值,然后再应用Newton迭代法由估计值求得精确交点。如果认为估计交点分布不够细密,可以对网格加密,由此可以得到完整、致密的精确交线而无需应用追踪法。