您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页cad cam实验报告 贝齐尔(Bezier)曲线曲面的生成方法

cad cam实验报告 贝齐尔(Bezier)曲线曲面的生成方法

来源:飒榕旅游知识分享网


CAD / 技 术 实 验 报 告

学院:班级:学院:姓名:班级:机电学号:姓名:高延良学号:CAM

机电工程学院 10-01班 541002010111

实验三 贝齐尔(Bezier)曲线曲面的生成方法

实验类型:综合型

一、目的与任务

目的:通过学生上机,了解贝齐尔(Bezier)曲线德卡斯特里奥的递推算法和贝齐尔(Bezier)曲线的几何作图法。

任务:熟悉线框建模、表面建模的基本方法。 二、内容、要求与安排方式

1、实验内容与要求:

贝齐尔(Bezier)曲线曲面的德卡斯特里奥的递推算法P(t)=∑Bi,n(t)Q(i)和几何作图法;

要求用熟悉的编程语言编制、调试和运行程序,并打印程序清单和输出结果。

2、实验安排方式:课外编写好程序清单,按自然班统一安排上机。 三、实验步骤

1、熟悉贝齐尔(Bezier)的贝齐尔基函数和贝齐尔的性质

2、贝齐尔(Bezier)曲线的德卡斯特里奥的递推算法; 3、贝齐尔(Bezier)曲线的几何作图法;

4、贝齐尔(Bezier)曲线的德卡斯特里奥的递推算法; 5、贝齐尔(Bezier)曲线的几何作图法。

6、对几何作图法绘制出图,对德卡斯特里奥的递推算法编出程序。 四、实验要求

1.在规定的时间内完成上机任务。 2.必须实验前进行复习和预习实验内容。

3.在熟悉命令过程中,注意相似命令在操作中的区别。 4.指定图形完成后,需经指导教师认可后,方可关闭计算机。 5.完成实验报告一份。

五、试验具体内容

1, Bezier 曲线的描述

在空间给定n + 1 个点P0 ,P1 ,P2 , ⋯,Pn ,称下列参数曲线为n 次的Bezier 曲线。 P(t) = 6n

t = 0

PiJ i ,n (t) , 0 ≤t ≤1

其中J i ,n (t) 是Bernstein 基函数,即 B i ,n (t) = n !/i !(n - i) *t(1-t); i = 0 , ⋯⋯,n

一般称折线P0P1P2 ⋯Pn 为曲线P(t) 的控制多边形;称点P0 ,P1 ,P2 , ⋯,Pn 为P(t) 的控制顶点。在空间曲线的情况下,曲线P(t) = (x(t) ,y(t) ,z (t) ) 和控制顶点Pi = (Xi ,Yi ,Zi) 的关系用分量写出即为: X(t) = 6n i = 0

XiJ i ,n (t) Y(t) = 6 n i = 0

YiJ i ,n (t) Z(t) = 6n i = 0

ZiJ i ,n (t)

当t 在区间[0 ,1 ] 上变动时,就产生了Bezier 曲线。若只考虑x和y ,就是平面上的Bezier 曲线。以三次Bezier 曲线为例,它可用矩阵形式表示如下: P(t) = [t3 t2 t 1] - 1 3 - 3 1 3 - 6 3 0 - 3 3 0 0 1 0 0 0 Q(0) Q(1) Q(2) Q(3)

0 ≤t ≤1

2, Bezier 曲线的性质

Bezier 曲线具有以下性质:

当t = 0 时,P(0) = P0 ,故P0 决定曲线的起点,当t = 1 时,P(1) = Pn ,故Pn 决定曲线的终点。Bezier 曲线的起点、终点与相应的特征多边形的起点、终点重合。Bezier 曲线P(t) 在P0 点与边P0P1 相切,在Pn点与边Pn- 1Pn 相切。Bezier 曲线P(t) 位于其控制顶点P0 ,P1 ,P2 ,⋯,Pn 的凸包之内。 Bezier 曲线P(t) 具有几何不变性。 Bezier 曲线P(t) 具有变差缩减性。 3, Bezier 曲线的de Casteljau 算法

Paul de Casteljau 发现了一个Bezier 曲线非常有趣的特性,任何的Bezier 曲线都能很容易地分成两个同样阶次的Bezier 曲线。

图1 定比分割

如图1 所示,当P0 ,P2 固定,引入参数t ,令 P0P10 P10 P1 =

P1P11 P11 P2 = P10 P20 P20 P11

的比值为t : (1 - t) ,即有:

P10= (1 - t) P0 + tP1P11= (1 - t) P1 + tP2P20= (1 - t) P10+ tP11t 从0变到1 ,第一、二式是两条一次Bezier 曲线。将一、二式代入第三式得: P20= (1 - t) 2P0 + 2t (1 - t) P1 + t2P2

当t 从0 变到1 时,它表示了由P0 、P1 、P2 三个控制顶点形成的一条二次Bezier 曲线。并且表明:这个二次Bezier 曲线P02 可以定义为分别由前两个顶点(P0 ,P1) 和后两个顶点(P1 ,P2) 决定的一次Bezier 曲线的线性组合。依次类推,由四个控制点定义的三次Bezier 曲线P03 可被定义为分别由(P0 ,P1 ,P2) 和(P1 ,P2 ,P3) 确定的二条二次Bezier曲线的线性组合,由(n + 1) 个控制点Pi (i = 0 ,1 ,⋯,n) 定义的n 次Bezier 曲线P0n 可被定义为分别由前、后n 个控制点定义的两条(n - 1) 次Bezier曲线P0n- 1 与P1n- 1 的线性组合: Pn0 = (1 - t) Pn- 10 + tPn- 11 t ∈[0 ,1 ] 由此得到Bezier 曲线的递推计算公式: Pki = Pi k = 0 (1 - t)Pk- 1 i + tPk- 1

i+1 k = 1 ,2 , ⋯,n ,i = 0 ,1 , ⋯,n - k

这便是de Casteljau 算法。用这一递推公式,在给定参数下,求Bezier 曲线上一点P (t) 非常有效。上式中:Pi0 = Pi 是定义Bezier 曲线的控制点,P0n 即为曲线P(t) 上具有参数t 的点。这一算法可通过简单的几何作图来实现,给定参数t ∈[0 ,1 ] ,把定义域分成长度为t : (1 - t)的两段。依次对原始控制多边形每一边执行同样的定比分割,所得分点就是第一级递推生成的中间顶点Pi1 (i = 0 ,1 , ⋯,n - 1) ,对这些中间顶点构成的控制多边形再执行同样的定比分割,得第二级中间顶点Pi2 (i = 0 ,1 , ⋯,n - 2) 。重复进行下去,直到n 级递推得到一个中间顶点P0n 即为

所求曲线上的点P(t) 。当t = 1/ 2 时,从(2) 式可知,求Pik 只需进行加法和除2 运算,在计算机内除2 运算只需右移1位,计算速度快。所以通常取t = 1/ 2 最方便,

即每次求得Bezier

曲线的中点。

如图2 所示,有0 ,1 ,2 ,3 四个控制点,计算每条线的中点01 ,12 ,23 ,再得中点012 ,123 ,最后得到的中点0123 即在曲线上。四个控制点0 ,01 ,012 ,0123 又定义

了左边的曲线, 四个控

制点0123 ,123 ,23 ,3 又定义了右边的曲线,重复对左右的两条曲线再进行定比分

割,多次进

行定比分割后,就可以用直线段代替曲线段[3 ] 。

图2 de Casteljau 算法的几何作图(t = 1/ 2)

六、贝齐尔(Bezier)曲线德卡斯特里奥的递推算法程序清单 #include #include void main() {

int i,j,k,f,u,d,n,m,w,g,h; char c1;

i=0;j=1;k=1;w=1;g=1;h=1;f=1;u=1;d=1; printf(\" please input n number:\\n\"); scanf(\"%d\ for(i=0;i<=n;i++) {

{ for(g=1;g<=n;g++) f=f*g; for(h=1;h<=i;h++) u=u*h;

for(w=1;w<=(n-i);w++) d=d*w; m=f/u/d; printf(\"%d\ f=1;u=1;d=1; }

for(j=1;j<=i;j++) printf(\"t\");

for(k=1;k<=(n-i);k++) printf(\"(1-t)\");

printf(\"Q(%d)\

if(i==n)break;else printf(\"+\");

} }

七、运行结果

八,MATLAB曲面生成程序:

[th,r]=meshgrid((0:5:360)*pi/180,0:.05:1); %在极坐标系下设置一个73×21的网格矩阵,

[X,Y]=pol2cart(th,r); %转化为笛卡儿坐标系% Z=X+i.*Y;

F=abs((Z.^4-1).^(1/4));

surf(X,Y,F); %显示曲面的立体图形%

S=[X(:) Y(:) F(:)]; %把X、Y、F 3个矩阵中的数据存储到矩阵S中% b=size(S);

S=[floor(1:b(1,1));S']'; save flcxq.ibl S –ascii

图像为:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务