实验十一  Bezier曲线的绘制

 

一、实验目的

初步了解Bezier曲线的定义,能利用Matlab软件绘制二次Bezier曲线和三次Bezier曲线。

 

二、相关知识

Bezier曲线是一种广泛应用于外形设计的参数曲线,它通过对一些特定点的控制来控制曲线的形状,我们称这些点为控制顶点。现在我们来给出Bezier曲线的数学表达式。

在空间给定个点,称下列参数曲线为Bezier曲线。

         

其中Bernstein基函数,其表达式为:

       

一般称折线为曲线的控制多边形;称点的控制顶点。Bezier曲线与其控制多边形的关系可以这样认为:控制多边形的大致形状的勾画;是对的逼近。

Bezier曲线有许多性质,我们这里仅讨论两条:

1)端点位置

我们指出,的两个端点,这一点容易从的表达式得到,即

2)端点的切线

Bezier曲线点与边相切,在点与边相切,此性质可以从以下二式得证:

     

Bezier曲线还有一些其它性质,这些将在今后的《计算几何》课程中专门讨论。

现在我们讨论Bezier曲线的Matlab绘制。先讨论2Bezier曲线,即的情形。此时有3个顶点,为了在Matlab中计算方便,我们将Bezier曲线的一般表示式改写为矩阵形式,我们得到:

这样,对于确定的,我们取定区间中的值后,即可计算的值,注意,的维数是与的维数对应的,如果是平面上的点即2维坐标,则也是2维坐标,如果是空间的点即3维坐标,则也是3维坐标,因此,对于每一组确定的,即可绘制出一条2Bezier曲线。完成平面2Bezier曲线的Matlab程序如下:

先编制完成Bezier曲线计算和绘制的函数bezier2.m,其参数是控制顶点的坐标。

% Bezier Square Curve Ploter

% This file will create a Bezier square curve and dispay the plot.

% The parameter is the Vertex matrix.

function [X] = bezier2(Vertex)

BCon=[1 -2 1;-2 2 0;1 0 0];                  % constant Matrix

for i = 1:1:50                            

   par = (i - 1)/49;

   XY(i,:) = [par^2 par 1]*BCon*Vertex;      % create data

end

% display the vertices and the curve using Matlabs built-in graphic functions

clf                                     % this will clear the figure

plot(Vertex(:,1),Vertex(:,2),'ro',XY(:,1),XY(:,2),'b-')

% create a plot of both the Vertices and curve, the vertices will be red “o”

% while the curve is blue line

line(Vertex(:,1),Vertex(:,2),'color','g')       % add the control polygon.

xlabel(' x ')

ylabel ('y ')

title('Square Bezier Curve')

legend('控制顶点','Bezier曲线','控制多边形')   % you can move the legend on the plot

然后,在命令行定义Bez2Vertex=[ 0 0 ; 0.3 0.7 ; 1.0 0.2],即定义,再在命令行输入bezier2(Bez2Vertex),则可得到如下的图形:

    通过改变控制顶点的坐标,即可得到所需要的2Bezier曲线。

接着我们讨论3Bezier曲线,我们也采用将表达式改写为矩阵形式的方法,我们得到:

这样,我们就可以用与前面几乎相同的程序来绘制3Bezier曲线了。如设,则可得到如下的3Bezier曲线。

注意:图中“o”表示控制顶点,直线表示控制多边形,曲线即为Bezier曲线。

当我们需要的曲线较为复杂时,仅用一段Bezier曲线难以表示,此时,我们可以采用拼接的方法,通过重复使用较为简单的绘制方法来绘制出较为复杂的图形。

在拼接时,我们首先要求曲线是连续的,我们以二段3Bezier曲线的拼接为例来讨论。设控制顶点分别为,则当重合时,即能保证曲线连续,我们称两段曲线这样的连续为零阶几何连续,在此基础上,如果我们保证重合,且均不为零且同向,则我们可以保证曲线在处是光滑的,此时,我们称该曲线在处为一阶几何连续。在稍微复杂一点的条件下,我们还可以使曲线在拼接处有相同的曲率。同时,Bezier曲线还有其它的生成算法,这些都留待以后去讨论。

三、实验内容

1.设,绘制以为顶点的2Bezier曲线。

2.设.设绘制以为顶点的3Bezier曲线。

3.已知有7个顶点,,用二段3Bezier曲线来绘制出分别以为控制顶点的Bezier曲线。

4*.推导4Bezier曲线计算公式的矩阵形式。

5*.编制Matlab程序绘制以为控制顶点的4Bezier曲线。

6.完成实验报告。