C-Bézier曲线的双圆弧逼近
2010-11-26陈建兰
陈建兰
(杭州电子科技大学理学院,浙江杭州310018)
0 引 言
B样条、Bézier、C-Bézier、NURBS、圆弧等是计算机图形学领域中常用的样条曲线,广泛用于自由型曲线曲面设计。其中C-Bézier样条曲线具有形状简单、使用灵活等特点,在数控加工中,因为刀具路径通常是由线段和圆弧组成的,所以大多数情况下需要将曲线转换成为由圆弧与直线段组成的圆弧样条进行表示,而后进行加工。为了提高效率,通常采用圆弧样条。在当前研究中,用圆弧样条对曲线进行逼近,主要分为单圆弧和双圆弧两种方法。就连接点处的连续性而言,单圆弧算法比双圆弧算法的优点是可以减少所使用的圆弧段数,缺点是一旦初始顶点处的切线方向确定,整条圆弧样条就完全唯一确定下来,因而缺乏灵活性。此外,单圆弧稳定性不好,改动初始点或初始切向,整条曲线都要跟着变动,而双圆弧方法则不存在这些缺点。给定两个端点以及端点处对应的单位向量,可以用双圆弧进行逼近[1-3]。本文采用双圆弧对C-Bézier样条曲线进行(分段)逼近,该方法的优点主要是计算相对简单且误差小。
1 3次C-Bézier曲线的定义
3次C-Bézier曲线以sint,cost,t,1为基,代替传统的3次Bézier曲线的标准基 t3,t2,t,1,C-Bézier曲线包含一个控制参数α,0<α≤π,该参数控制曲线的形状,当α趋近于0时,C-Bézier曲线的极限为Bézier曲线[4]。
1.1 3次C-Bézier曲线用多项式来表示
1.2 C-Bézier曲线的性质
(1)基函数的正性与权性:Zj(t)>0,(j=0,1,2,3);Z0(t)+Z1(t)+Z2(t)+Z3(t)≡1。(2)端点属性:1)端点位置Bα(0)=q0,Bα(α)=q3;2)端点切矢量)端点曲率向量;式中(3)几何不变性:几何性质不随坐标变化而变化的性质,曲线的形状独立于坐标的选择。(4)保凸性:如果控制多边形是凸的多边形,则C-Bézier曲线也是凸的。
2 双圆弧的确定
2.1 双圆弧
双圆弧[1]的定义为:给定不同的两个点P1和P2,以及在点P1处的单位向量和在点P2处的单位向量,设圆弧C1和C2满足下列条件:
(1)C1以P1为起点,且在起点处的单位切向量为;(2)C2以P2为终点,且在终点处的单位切向量为;(3)C1的终点C是C2的起点;(4)C1和C2在C点处具有共同的单位切向量。则由圆弧C1和C2共同组成的曲线段称为双圆弧,点C称为双圆弧的连接点(公切点)。
用双圆弧逼近C-Bézier样条曲线的方法为:用于逼近的双圆弧的两个端点及其单位向量相对应C-Bézier样条曲线段的两个端点及其单位向量,并且双圆弧在连接点处光滑相切。
2.2 连接点的选择
从双圆弧的定义可知确定双圆弧需要6个条件,而双圆弧逼近方法中包含只有5个条件,所以还需要一个约束条件,才能确定双圆弧的连接点。因双圆弧的连接点的轨迹是一个圆[4],在这个轨迹圆上选择一个连接点的方法有无限多种,所以选择合适的连接点将直接影响到逼近光顺性和逼近效果。一般在进行3次样条双圆弧逼近时,把双圆弧的连接点的轨迹圆与样条的交点作为双圆弧的连接点(因交点一定存在),该方法的优点是计算简单,而且逼近误差小。
因3次C-Bézier曲线带着参数α,轨迹圆与C-Bézier曲线的交点不一定存在。本文采用轨迹圆与C-Bézier曲线的距离最近的点作为连接点,此法计算较为简单,逼近误差较小,光顺性好。
2.3 算法
双圆弧逼近3次C-Bézier曲线的算法描述如下:
输入一条3次C-Bézier曲线,它有4个控制点q0,q1,q2,q3,参数α0(0<α0<π),记 q0处的单位切向
输出逼近C-Bézier曲线的双圆弧。
步骤 1 求 C-Bézier曲线 Bα(t)=Z0(t)q0+Z1(t)q1+Z2(t)q2+Z3(t)q3;
步骤2 求公切点C;
设公切L线交q0q1的连线于Q1,交q2q3的连线于Q2,记|q0Q1|=a(设a为参数0≤a≤|q0q1|),|q3Q2|=b,则Q1=q0+a◦e→1,Q2=q3-b◦e→2,且由|Q1Q2|=a+b 解出 b(b 含参数 a,用数学软件 Matlab 解b),得公切点
计算公切点C到C-Bézier曲线的距离dα=|C-Bα(t)|,并求出有最小距离的C(即设为连接点);
步骤 3 设双圆弧 C1和 C2的圆心为 O1和 O2,半径为 R1和 R2,则由双圆弧的定义得可解得O1和O2,并得半径 R1=|O1q0|,R2=|O2q3|;
步骤4 双圆弧C1和C2逼近C-Bézier曲线时,多用法向误差e=max(||O1-Bα(t)|-R1|,||O2-Bα(t)|-R2|);
步骤5 若误差e大于给定值,则对C-Bézier曲线分段重新处理,即返回步骤2。
3 实 例
给定一条3次C-Bézier曲线,其控制顶点为q0=(0,0),q1=(0.3,0.5),q2=(0.7,0.5),q3=(1,0),形状控制参数α=1;用双圆弧逼近此3次C-Bézier曲线,给定误差e≤0.01。经Matlab编程,不用分段,计算得公切C点中的a=0.583,b=0.290;公切点坐标为C=(0.332,0.332),双圆弧的圆心坐标为O1=(0.724,-0.434),O2=(0.619,-0.229),双圆弧的半径R1=0.844,R2=0.445;逼近的最大误差e=0.009。从实例的计算中可以看出,在一定的误差要求下,可以用双圆弧逼近C-Bézier曲线。
4 结束语
本文用双圆弧对C-Bézier曲线进行逼近,结果表明在允许误差内双圆弧是局部存在的。此法可推广到其它曲线的逼近,在数控加工及工程图纸的绘制中有一定的实际和应用价值。
[1] 王国兵,侯增选.三次均匀B样条曲线的双圆弧逼近方法[J].计算机应用研究,2008,25(4):1 087-1 089.
[2] 汪国平,孙家广.平面NURBS曲线及其 offset的双圆弧的逼近[J].软件学报,2000,11(10):1 368-1 374.
[3] 卢建彪,雍俊海.二次 Bézier曲线的双圆弧样条插值二分算法[J].计算机应用研究,2006,23(8):172-173.
[4] 樊建华,邬义杰,林兴.C-Bézier曲线分割算法及G1拼接条件[J].计算机辅助设计与图形学学报,2002,14(5):421-424.
[5] 王国谨,汪国昭,郑建民.计算机辅助几何设计[M].北京:高等教育出版社,施普林格出版社,2001:1-16,70-80.
[6] Zhang JW.C-curves:An extension of cubic curves[J].Computer-Aided Geometric Design,1996,13(3):199-217.