基于MATLAB的Bezier样条在曲线曲面造型中的应用

时间:2022-10-09 10:49:12

基于MATLAB的Bezier样条在曲线曲面造型中的应用

摘 要:Bezier样条作为曲线曲面造型技术的一个重要分支被广泛运用于CAD/CAM技术。以MATLAB为程序平台,以Bezier样条为理论基础,首先设计出绘制曲线曲面的程序算法,进而通过算法编写出可实际操作的程序,最后用实例进行验证。其中更实现了对曲线的拟合以及将设计得到的曲面数据输入逆向工程软件imageware,从而达到利用造型成果其进行更加复杂的造型构造的目的。

关键词:Bezier样条;MATLAB;imageware

Bezier曲线起源于20世纪60年代晚期,著名的法国数学家皮耶尔・Bezier运用数学方法为雷诺公司的汽车制造业研究出一种矢量绘制曲线的方法。这种方法的巧妙之处在于它是利用控制矢量点位置的变动从而改变曲线的形态。现代设计师大部分都是在计算机上进行设计,而在过去并没有发明手写板的时候,设计师们很难用鼠标绘制理想的曲线。Bezier样条的出现大大改变了这种困境,让设计师们通过输入控制点坐标,从而很容易地得到所需要的曲线。

MATLAB是美国MathWorks公司出品的一款商业数学软件,主要包括MATLAB和Simulink两大部分,是一种编程语言和数值计算环境。和其他数学类科技应用软件相比,MATLAB无论在数值计算还是图形处理上都占有很大优势。本文主要讨论的就是运用Bezier样条原理在MATLAB上实现曲线拟合以及曲线曲面造型。

一、Bezier曲线造型

1.Bezier曲线理论原理

在空间中设定n+1个点p0,…pn,则下列参数曲线为n次Bezier曲线:

P(t)=■PiJi,n(t),0≤t≤1

式中Ji,n(t)是伯恩斯坦基函数,即

Ji,n(t)=Cinti(1-t)n-i

Cin=■,i=0,……,n

以三次Bezier曲线为例,如果p0、p1、p2、p3是空间中的四个点,那么三次多项式曲线

p3(t)=■PiB3,t(t)

可用矩阵表示如下:

P(t)=[t3t2t1]-1 3 -3 13 -6 3 0-3 3 0 01 0 0 0P0P1P2P3

式中Bi是第i个Bezier多项式,被称为三次Bezier曲线包含了控制点p0,…p3。

2.Bezier曲线造型程序设计

在实际拟合造型的操作中,更为复杂的图形往往由多种曲线构成,它们的复杂程度和拐点个数各不相同。按照上面的思路,则每遇到一种曲线就需要编写一个程序,这显然是麻烦而不切实际的。为了实现造型目的,需要编写一种不受函数次数限制的程序,以适应所有的曲线情况。

通过构造参数点坐标矩阵,以伯恩斯坦基函数为基础而非某个特定次数的Bezier函数,用for循环实现i从0到n(输入控制点个数)的伯恩斯坦基函数的叠加,得到参数t以1/m为步长从0到1变化时曲线上m个点的坐标并填入坐标矩阵,最后连接这些坐标点得到曲线,从而达到不受函数次数限制的目的。根据上述思路编写了以下程序:

这样,当输入不同个数的参数点,就可以得到不同次数的曲线。

当需要对曲线进行拟合的时候,只知道曲线情况,而不知道控制点的坐标,则需要通过曲线上的点对其进行反求。根据Bezier曲线的矩阵形式以及伯恩斯坦基函数可以很容易写出数值方法反求控制点坐标的程序。

3.Bezier曲线造型应用

首先在坐标纸上设计出需要的图案。

根据曲线实际情况(复杂程度、拐点个数、曲率大小等)将曲线分段并选择坐标点,通过对上文编写得到的反求控制点程序以及曲线造型程序的结合使用,最终可以在MATLAB上得到下面这幅拟合度很高的图案(因为造型过程较为繁琐复杂,本文省略中间造型程序)。

二、Bezier曲面造型

1.Bezier曲面理论原理

先给出一条以u为参数的m次Bezier曲线:

P=■PiBi,m(u),0≤u≤1(1)

式中Bi,m(u)为伯恩斯坦基函数。

让p的(m+1)个控制点分别沿着空间的(m+1)条曲线运动,而这些曲线都是以w为参数的n次Bezier曲线:

Pi=■Pi,jBi,n(w),0≤w≤1(2)

将方程(2)代入方程(1),得到Bezier曲面的表达式

P(u,w)=P=■■Pi,jBi,m(u)Bj,n(w) 0≤u,0≤w≤1(3)

将Bezier曲面方程(3)改写成矩阵形式

P(u,w)=B0,m(u)B1,m(u)…Bm,m(u)・

P0,0 P0,1…P0,nP1,0 P1,1…P1,nPm,0 Pm,1…Pm,nB0,n(w)B1,n(w)Bm,n(w)0≤u,w≤1(4)

把方程(4)用幂基的形式表示出来,表示为:

P(u,w)=[U][Mm][p][Mn]T[W]0≤u,w≤1(5)

式中,[U]=[um um-1…u 1];[W]=[wn wn-1…w 1]T;[Mm],[Mn]分别为m次与n次的幂基矩阵。

2.Bezier曲面造型程序设计

由上述方程的幂基形式编写曲面造型主要程序:

编写曲面造型程序的难点依然在于因为如何让程序适应不同次数的Bezier函数的需要。显然由于这是一个以矩阵为基础的程序,则同曲面程序那样采用循环语句的方式是很麻烦的。由上述程序可以看出,不同次数的Bezier函数所需要的参数矩阵和系数矩阵都不相同,参数矩阵很容易改变。所以问题在于如何快速创建庞大的系数矩阵。

还是以双三次Bezier曲面为例,首先用taylor对曲线函数进行泰勒展开:

接下来使用命令sym2poly提取其中的系数:

最后用reshape将系数转化为矩阵形式:

这样,当输入命令xishujuzhen(n)时,就可以直接得到n次Bezier曲面的系数矩阵。

3.Bezier曲线造型应用

以双三次Bezier曲面为例,通过输入控制点坐标可得到以下曲面:

Px=[2 4 6 8; 2 4 6 8; 2 4 6 8; 2 4 6 8];

Py=[8 7 7 8; 6 6 6 6; 4 4 4 4; 2 3 3 2];

Pz=[20 0 0 20; 8 10 10 8; 8 10 10 8; 20 0 0 20];

由于MATLAB所绘制的曲面是无法直接导入imageware的。所以可以想到通过把程序计算所得的矩阵数据经过一系列矩阵变形与合并,最后将其存储为点云数据文件,导入imageware中。继而在imageware里将点云拟合成曲面,从而更加直观地把构造得到的曲面体现出来,并实现对其加工编辑,甚至直接制造工件。以上面最后一个曲面为例,得到以下点云图,以及最终曲面。

总之,Bezier样条作为曲线曲面造型中极为重要的基础样条之一,被广泛运用于CAD/CAM技术中。借助其方便快捷的控制方法以及优秀的曲线属性,曲线曲面的快速造型得以实现。

本文设计的造型程序不受函数次数限制,只需输入控制点数据即可进行造型。同时,在曲线造型中实现了根据手绘的曲线在MATLAB中拟合出相应图形,在曲面造型中实现了造型数据向三维制作程序的对接。使得程序具有了极强的实用性。

参考文献:

[1]徐甜,刘凌霞.Bezier曲线的算法描述及其程序实现[N].安阳师范学院学报,2006(46).

[2]郝小忠.Bezier曲面建模方法研究与实现[J].中国制造业信息化,2011,40(23):42-45.

[3]王天军.一个反求Bezier曲面控制点的算法[N].计算机辅助设计与图形学学报,1992(3).

[4]Prof Denis Zorin. Bezier Curves and B-splines[Z]. New York: New York University, 2002.

(作者单位 张书华:中国农业大学理学院2009级数学1班 马苏奇:中国农业大学理学院)

上一篇:留数在计算实变函数积分中的应用 下一篇:C语言实验课教学设计