一种简单的二次B样条曲线拟合算法
2010-07-25高剑光
高剑光
0 引言
在飞机外形设计与机械零件加工中,经常遇到许多有2次曲线弧和2次曲面片表示的形状,如圆弧、椭圆弧、圆柱面、圆锥面、椭球面等,这些曲线曲面在设计中需要有明确的表现形式,在制造上又要求有较高的精确度。对于这种曲面的加工,一般是用激光坐标测量仪测出每一断面的一组离散、有序点列,然后对离散点进行曲线拟合。拟合方法是直接用3次样条或参数样条或双圆弧拟合等方法。双曲圆弧拟合算法是常用的一种算法。
1 双圆弧拟合算法
按平面曲线给定一列有序型值点(节点),每相邻节点之间有两条相切圆弧构成,两圆弧通过一个节点,且节点处的切线斜率与曲线在节点处的斜率相等,叫做曲线的双圆弧拟合如图1所示。双圆弧拟合有6个参数需要确定:两节点Pi,Pi+1;两节点Pi,Pi+1处的切线斜率;双圆弧的切点T;双圆弧切点处的公切线斜率。前4个参数可由曲线的参数方程按给定参数值求得。双圆弧拟合方法主要根据后两个参数的求法不同而不同,但不难证明两圆弧相切点位置结论:相切点位置有无穷多个;相切点的轨迹是一个圆弧——轨迹弧。
为确保双圆弧的正确拟合,要求:
(1)两拟合圆弧应满足保凸要求,即两相邻节点Pi,Pi+1处切线PiM,Pi+1M需有实交点(沿某切线方向前进时,与另一切线的反向延长线的交点,反之为虚交点);
(2)拟合的圆弧段需要采用劣弧,即两节点连线PiPi+1与两切线PiM,Pi+1M构成的三角形中2/πβ<+a(如图1所示)设节点A和B为在第i+1个区间[Pi,Pi+1] 上的相邻节点,有向直线gA和gB为拟合曲线jΓ在A和B上的有向切线。设C是直线gA和gB的交点,a和β分别是gA和gB与横轴的夹角,逆时针方向为正;当aβ<0(保凸)时,双圆弧同向,为 C形双圆弧。在局部坐标系下,双圆弧圆心和半径可以统一地给出。左圆半径
图1 双圆弧曲线
圆心坐标
右圆半径
圆心坐标
共切点的坐标
其中,αβω−=;θ是左圆弧的圆心角,ω-θ是右圆弧的圆心角;逆时针方向为正;正圆对应正圆心角,负圆对应负圆心角,πθπ<<−,L是AB的长度。对于该区间,当切线gA和gB确定之后,选取不同的θ(即选取不同的公切点)决定了双圆弧的参数。这里选取θ=-a,亦即选取三角形的内心作为公切点。
关于双圆弧拟合,目前国内外常用的方法有两种。内向法和交点法。内向法计算简便,但可能法向误差不能保证符合要求。交点法的法向误差较小,但交点计算复杂,需解四次非线性方程,计算量之大可想而知。实际自由曲线拟合绘制过程中,也常采用3次B样条基函数进行拟合运算,为了使得曲线比用折线来代替要绘制的曲线看上去更光滑,应尽可能多地进行曲线上位置点的拟合计算,这样,绘制一条B样条曲线就需要反复多次计算各坐标分量的3次多项式,其计算量也相当大,绘制拟合速度极慢,难以满足实际需要。
2 二次B样条曲线拟合算法
本文提出了一种简单的2次B样条曲线拟合算法,即用两条2次曲线近似一条3次曲线,以期达到计算量小,光滑度也达到要求,提高 B样条曲线的绘制速度,适应各应用领域的快速绘制要求。
2.1 算法及其实现过程
通常情况我们是将4点拟合成一条三次B样条曲线,由于3次曲线有拐点,而2次曲线没有。所以对于4点我们不可能拟合成一条2次曲线,而是用2条2次曲线拼接,中间出现一拐点,来近似1条3次曲线。
算法实现过程如下:
2次B样条曲线段参数方程表示为
显然曲线段从A点出发到C点中止,在A点曲线与直线B-A相切,在C点与C-B相切。(如图2所示)
图2 A、B、C三点控制的曲线段
曲线段由A,B,C3点控制,将它简记为
给定平面上4个点P1,P2,P3,P4拟合成2条相连的从P2到P3的2次样条曲线,方法如下:
在此缩放是避免两条插值曲线段打圈。(如图3所示)
图3 两条插值曲线段打圈情形
乘系数0.293不是一定要这个值,其实可以用其他参数,不超过0.5都合适。取这个值是保证正方形角上4点恰好可以拟合成一个圆。
把T1作为目标曲线在P2点处的一阶导矢,T2作为目标曲线在点P3处的一阶导矢:(如图4所示)
假设组成目标曲线的两条B样条曲线段为
取
通过求导易知在连接点导数都是D2-D1,故两曲线段C在D1和D2的中点(D1+D2)/2处相连且一阶导数连续。
2.2 算法运用实例
给定平面上的一列点P1-P2,……,Pn拟合出一条依次经过这些点的二次B样条曲线。将点列前后各延拓一点,成为P0,P1,P2……,Pn,Pn+1,延拓办法为:将P3做线段P1P2中垂线的镜像,镜像点作为P0,将点Pn-2做线段Pn-1Pn中垂线的镜像,镜像点作为Pn+1。依次将点列P0,P1,P2……,Pn,Pn+1相邻4点按上面的算法拟合成两条B样条曲线段,所有这些曲线段首尾相连,且在结点处的一阶导数连续,它们构成所需要的目标曲线。(如图4所示)做出了给定平面上4个点P1,P2,P3,P4,拟合出依次经过这些点的二次B样条曲线;
图4 过4点拟合的二次B样条曲线
(如图5所示)做出了经过平面上给定的5个点,拟合出2次B样条曲线。同样的方法,可以做出经过给定的 n个点,拟合出的B样条曲线。
图5 过5点拟合的二次B样条曲线
3 算法的比较
用双圆弧拟合离散型值点生成自由曲线,是近年来非圆曲线的零件自动编程与加工中常用的一种数学模型。双圆弧拟合方法以其计算相对简单,总体上一阶光滑,易于局部处理等特点,已得到了较为广泛的应用。但其计算量大。本文讨论的简单的2次B样条曲线拟合算法。采用4点来确定2条2次曲线,用2条2次曲线近似1条3次曲线的方法。既弥补了3次曲线以及双圆弧拟合中计算量大的缺陷,又弥补了2次曲线的不足,具有以下优点:
1、计算量小,快速性。因为拟合采用二次曲线拟合算法,拟合速度较快,而且避免了解大量的方程组,提高了运算速度。
2、光滑性。由于B样条曲线是连续的,且它不通过任何一个控制点(型值点),比Bezier曲线更光滑。
3、局部性。B样条曲线具有非整体性,即改变某一个控制点仅影响其附近的一段曲线,更有效地解决了4个以上控制点的拟合问题。
4 结语
本文针对双圆弧拟合算法绘制一条 B样条曲线需要反复多次计算各坐标分量的3次多项式,计算量大,绘制拟合速度极慢,难以满足实际需要等情况,提出了一种简单的2次B样条曲线拟合算法——采用4点来确定2条2次曲线,用2条2次曲线近似1条3次曲线,既弥补了3次曲线以及双圆弧拟合中计算量大的缺陷,又弥补了2次曲线的不足,更有效地解决了4个以上控制点的拟合问题。
[1] Barsky B A. Computer Graphics and Geometric Modeling Using Beta-Spline [M] .Heidelberg:Springer-Verlag,1988.
[2] Hoschek J,Lasser D. Fundamentals of Computer Aided Geometric Design[M] . Wellesley, MA:A K Peters,1993.
[3] 施法中.计算机辅助几何设计与非均匀有理B样条[M] .北京:北京航空航天大学出版社,1994,228-255.
[4] 王沫然.MATLAB与科学计算(第2版)[M] .北京:电子工业出版社,2003.
[5] 虞铭财,杨勋年,汪国昭.整体最优双圆拟合[J] .高校应用数学学报A辑,2004,19(2):225-232.
[6] 苏步清,刘鼎元.计算几何[M] .上海;上海科技出版社,1981:121-140.
[7] 阎童,王琦.双圆弧拟合在轮廓仿真加工中的应用[J] .小型微型机算机系统,1998,19(10):57-60.