计算机图形学实验报告3_第1页
计算机图形学实验报告3_第2页
计算机图形学实验报告3_第3页
计算机图形学实验报告3_第4页
计算机图形学实验报告3_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机图形学实验报告实验七 曲线的生成算法一、实验教学目标与基本要求1. 掌握曲线生成的基本算法原理;2. 能实现曲线的生成;3. 掌握课本所介绍的图形算法的原理和实现。二、理论基础实现bezier曲线和b样条曲线生成算法。 1. bezier曲线生成算法实现(参见教材p304306):三次bezier曲线及de casteljau算法。 2. b样条曲线生成算法实现(参见教材p314316): b样条曲线的分割,节点插入算法(选做)。三算法设计与分析(1)bezier曲线生成算法实现一次bézier曲线根据n次bézier曲线定义公式,当n=1时,有: 当n=2时 此式说

2、明二次berzier曲线对应一条起点在p0,终点在p2处的抛物线,即有p(0)=p0,p(1)=p2,p'(0)=2(p1-p0),p'(1)=2(p2-p1)。三次bézier曲线 当n=3时 ,有三次bézier曲线 :由此可得三次berzier的矩阵表达式p(t)=tmzp0 p1 p2 p3t=tmzp若令s=1-t, 则把三次berzier曲线p(t)改写成p(t)=(c30sp0+ c31tp1)s+ c32t2p2+ c33t3p3。(2) bézier曲线的分割递推casteljau算法抛物线的三切线定理:设p0、p02、p2是一条

3、抛物线上顺序三个不同的点。过p0和p2点的两切线交于p1点,在p02点的切线交p0p1和p2p1于p01和p11,则如下比例成立: bézier曲线的de casteljau算法 给定空间n+1个点pi(i=0,1,n)及参数t,有: 上式中,pi0=pi是定义bezier曲线的控制点,p0n即为曲线p(t)上具有参数t的点。 de casteljau算法稳定可靠,直观简便,可以编出十分简捷的程序,是计算bezier曲线的基本算法和标准算法。 当n=3时,de casteljau算法递推出的pik呈直角三角形,如图所示。从左向右递推,最右边点p03即为曲线上的点(3) .b样条曲线生

4、成算法实现b样条曲线的矩阵表示当k=1时,则有一次b样条曲线的基函数如下 :则pi,1(u)=n1,1(u)pi+ n2,1(u)pi+1一次b样条曲线是由每相邻两个顶点构造出一段直线段集。取k=2,则有二次b样条曲线的基函数空间相邻的每三个顶点可构造出一段二次b样条曲线,其中第i段可表示成取k=3,则有三次b样条曲线的基函数如下:三次b样条曲线段为:四、程序调试及结果的分析本程序运行环境为vc下的mfc环境。本实验将列出三次bezier曲线及de casteljau算法和b样条曲线的源代码。实验代码:(1). 三次bezier曲线源码double cquxianhuafaview:b03(d

5、ouble t)return(pow(1-t,3);double cquxianhuafaview:b13(double t)return(3*t*pow(1-t,2);double cquxianhuafaview:b23(double t)return(3*(1-t)*t*t);double cquxianhuafaview:b33(double t)return(t*t*t); cpen penred(ps_solid,1,rgb(255,0,0); cpen penblue(ps_solid,1,rgb(0,0,255);cpen pengreen(ps_solid,1,rgb(0,2

6、55,0); / 设置控制点,绘出特征多边形 x0=220;y0=10;x1=410;y1=10;x2=225;y2=150;x3=410;y3=100; pdc->selectobject(penblue); /使用蓝色画笔 pdc->moveto(x0,y0); pdc->lineto(x1,y1); pdc->lineto(x2,y2); pdc->lineto(x3,y3); /绘制 bezier 曲线 pdc->moveto(x0,y0); t=0; dt=0.01;/t 从 0 到 1,每步增加 0.01,取 100 个点 pdc->sel

7、ectobject(penred); /使用红色画笔 for (i=0;i<=100;i+) curx=(int)(b03(t)*x0+b13(t)*x1+b23(t)*x2+b33(t)*x3); cury=(int)(b03(t)*y0+b13(t)*y1+b23(t)*y2+b33(t)*y3); pdc->lineto(curx,cury); t=t+dt;(2)de casteljau算法源码void cquxianhuafaview:bez_to_points(cdc*pdc)point points;float t, delt;int i;/void decas(in

8、t , point , float );delt = 1.0 / (float) npoints;t = 0.0;for(i=0; i<=npoints; i+)decas(t);points.x = temp.x;points.y = temp.y;t = t + delt;/pdc->setpixel(points.x, points.y, color);pdc->lineto(points.x,points.y);void cquxianhuafaview:decas(float t)int r, i;float t1;point coeffa10;t1 = 1.0 -

9、 t;for(i=0; i<=degree; i+) coeffai.x = coeffi.x;coeffai.y = coeffi.y;for(r=1; r<=degree; r+)for(i=0; i<=degree-r; i+)coeffai.x = t1 * coeffai.x + t * coeffai+1.x;coeffai.y = t1 * coeffai.y + t * coeffai+1.y;temp.x = coeffa0.x;temp.y = coeffa0.y;(3)b样条曲线的源代码void cquxianhuafaview:bspl_to_poin

10、ts(cdc *pdc)cpen penblue(ps_solid,1,rgb(0,0,255);cpen pengreen(ps_solid,1,rgb(0,255,0); float px10=20,75,122,187,225,242,280,318,349,402;float py10=298,465,354,352,443,498,302,402,448,330;float a0,a1,a2,a3,b0,b1,b2,b3;int k,x,y;float i,t,dt;int n=10;dt=1/(float)n;pdc->selectobject(pengreen);for(k

11、=0;k<n;k+)if(k=0)pdc->moveto(pxk,pyk);pdc->lineto(pxk,pyk);pdc->selectobject(penblue);for(k=0;k<n-3;k+)a0=(pxk+4*pxk+1+pxk+2)/6;a1=(pxk+2-pxk)/2;a2=(pxk-2*pxk+1+pxk+2)/2;a3=-(pxk-3*pxk+1+3*pxk+2-pxk+3)/6;b0=(pyk+4*pyk+1+pyk+2)/6;b1=(pyk+2-pyk)/2;b2=(pyk-2*pyk+1+pyk+2)/2;b3=-(pyk-3*pyk+1+3*pyk+2-pyk+3)/6;for(i=0.0;i<n;i+=0.05)t=i*dt;x=a0+a1*t+a2*t*t+a3*t*t*t;y=b0+b1*t+b2*t*t+b3*t*t*t;if(i=0.0) pdc->moveto(x,y);pdc->lineto(x,y);运行结果展示:(1). 三次bezier曲线(2)de casteljau算法(3)b样条曲线整体显示如下:五实验心得及建议1.通过本次试验,我进一步加深了对于三次bezier曲线及de casteljau算法的理解。2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论