伯恩思坦多项式与Bezier曲线.doc
文本预览下载声明
伯恩思坦多项式与Bezier曲线
一、引言
1971年法国雷诺汽车公司的工程师Bezier 提出了一种新的参数曲线表示法。这种方法能方便地控制输入参数(控制点)以改变曲线的形状。被称为Bezier曲线,数学原理使用了伯恩思坦多项式。设f(x)是定义在[0,1]上的连续函数, 称表达式
右端为函数的伯恩思坦逼近多项式。
下面是函数的伯恩思坦多项式逼近实验程序
n=input(input n=);
x=[0:n]/n; f=sin(x*pi);
for i=1:n+1
y=f;t=x(i);
for k=n:-1:1
for j=1:k
y(j)=t*y(j)+(1-t)*y(j+1);
end
end
p(i)=y(1);
end
max(abs(f-p))
plot(x,f,b,x,p,o,x,p,r)
下面两图分别是取不同点数的伯恩思坦多项式逼近。
n=10逼近 n=20逼近
二、Bezier曲线
Bezier 曲线的形状是通过一组多边折线(控制多边形)的各顶点P0,P1,…,Pm所定义出来的。在多边折线的各顶点中,只有第一点P0和最后一点Pm在曲线上,其余的点则用以定义曲线的阶次。
给定控制多边形顶点P0,P1,…,Pm 的坐标
(x0,y0),(x1,y1),……,(xm,ym)
曲线参数方程为
,
其中, 为组合数,其计算公式为
在工程实际中,人们常用矢量函数的形式来表示平面曲线,若记
, (k = 0,1,…,m)
则有数学表达式
作为特殊情形,下面分别给出 m = 1,2,3时的Bezier曲线数学表达式。
1、一次Bezier 曲线是通过平面上两点的直线段,其数学表达式为
,()
2、 二次Bezier 曲线是由平面上三个点组成控制多边形,并由此确定的抛物线。数学表达式为
3、三次Bezier 曲线是由平面上四个点组成控制多边形,并由此所确定的三次曲线。数学表达式为
绘制曲线的算法常用加权平均法。这一算法的根据是组合数计算中常用的递推公式
以二次Bezier 曲线为例说明原理,由于
由于 (1-t) 和 t都是介于 0 和 1 之间的数,所以认为是加权平均的权值。给定三个点P0(x0,y0)、P1(x1,y1)、P2(x2,y2)作为控制多边形顶点后,二次Bezier 曲线上对应于参数 t 的点P(t)的坐标可用如下方法计算
(1)取点坐标的加权平均得的坐标
(2)取点的坐标的加权平均计算的坐标
图4-5
(3)取点的坐标的加权平均计算P(t)的坐标
曲线的矩阵表示算法
由于控制多边形各顶点的坐标可表示为矩阵形式的数据结构,借用矩阵的表示也可以实现算法。仍以计算二次Bezier 曲线上对应于的11个点的坐标数据为例说明算法原理。由于二次Bezier 曲线的数学表达式可以写作矩阵形式
我们希望最后所得的曲线上11个点的坐标数据以11×2的矩阵形式给出,以第一列表示X坐标,以第二列表示Y的坐标。由上式
是一个3×2矩阵(它是算法的初始输入数据),而应该是11×3矩阵。
三、应用
例1、飞机机翼图设计。利用贝塞尔曲线设计机翼剖面图,提取曲线数据,绘制机翼柱面图
MATLAB程序:
p=[0 0;0.01 0.5;0.5 1;2 0]; %输入控制多边形顶点
n=10;
t=(0:n)/n;t1=1-t;
z=[t1.^3 3*t.*t1.^2 3*t1.*t.^2 t.^3]*p; %矩阵法计算曲线坐标数据
px=p(:,1);py=p(:,2); %提取控制多边形顶点坐标
x=z(:,1);y=z(:,2); %提取曲线坐标
figure(1),plot(px,py,px,py,o,x,y) %绘机翼剖面图
x=[x(n+1:-1:2);x]; %利用对称性扩充曲线坐标
y=[y(n+1:-1:2);-y];
E=ones(1,11);X=x*E;Y=y*E; %制做柱面坐标数据
Z=ones(2*n+1,1)*[0:10];
figure(2),mesh(Z,X,Y),hold on
显示全部