计算机图形学.docx_第1页
计算机图形学.docx_第2页
计算机图形学.docx_第3页
计算机图形学.docx_第4页
计算机图形学.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

南京信息工程大学 计算机图形学基础 实验报告实验名称: 直线的扫描转换 实验日期:2013.12.23 得分: 指导老师: 郭帅 系: 理学系 专业: 信息与计算科学 姓名: 吴春娇 学号: 20112314029一、实验目的(1)熟悉直线和圆弧的扫描线转换算法;(2) 理解基本图形元素光栅化的基本原理,掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法;(3)学会用DDA法,中点法,Bresenham法这三种思想画直线,同时,对画直线的操作有一定的了解。2、 实验要求(1)使用Matlab语言实现两种直线的扫描线转换算法并在计算机上画出这两个图形。(2)记录所画直线的每一个点的坐标值以及当前的判别条件P或d。(3)记录所画圆的八分之一圆弧中每一个点的坐标值以及当前的判别条件P或d。(4)撰写实验报告并附上所用程序和结果3、 实验内容分别用“中点画线法”和“Bresenham算法”实现直线和圆弧的扫描线转换算法,并画出从(1,2)点到(9,7)点的一条直线和圆心为(1,2)半径为10的圆。(1)直线的DDA算法 DDA是数字微分分析式(Digital Differential Analyzer)的缩写。 已知直线两端点(x1,y1)、(x2,y2) 则斜率m为: m = (y2-y1)/(x2-x1)= Dx/Dy; 直线中的每一点坐标都可以由前一点坐标变化一个增量(Dx, Dy)而得到,即表示为递归式: xi+1=xi+Dx yi+1=yi+Dy递归式的初值为直线的起点(x1, y1),这样,就可以用加法来生成一条直线。具体算法是: 该算法适合所有象限,其中用了用了两个函数如: Integer(-8.5)= -9; Integer(8.5) =8; Sign(i),根据i的正负,分别得到-1,0,+1; /DDA DrawLine if(abs(x2-x1) abs(y2-y1) length = abs(x2-x1); else length = abs(y2-y1); Dx = (x2-x1)/length; Dy = (y2-y1)/length; x = x1+0.5*Sign(Dx); y = x2 + 0.5*Sign(Dy); i = 1; while(i = lenght) setpixel(Integer(x),Integer(y),color); x= x + Dx; y= y + Dy; i+=1; (2)中点法源程序function a=BresenhamCircle(xc,yc,r) % BresenhamCircle(1,2,10) figure(1); clf; x=0; y=r; d=3-2*r; a=x y d; drawcircle(xc,yc,x,y); while xy x=x+1; if d0 d=d+4*x+6; else d=d+4*(x-y)+10; y=y-1; end a=a;x y d; drawcircle(xc,yc,x,y); end (3)Bresenham算法源程序function a=Bresenhamline(x0,y0,x1,y1) % Bresenhamline(1,2,9,7) dx=x1-x0; dy=y1-y0; p=2*dy-dx; d1=2*(dy-dx);d2=2*dy; x=x0;y=y0; figure(1); clf; plot(x,y,*); a=x y p; while x0 y=y+1; p=p+d1; else p=p+d2; end hold on; a=a;x y p; plot(x,y,*); end 南京信息工程大学 计算机图形学基础 实验报告实验名称: 多边形裁剪 实验日期:2013.12.23 得分: 指导老师: 郭帅 系: 理学系 专业: 信息与计算科学 姓名: 吴春娇 学号: 201123140291、 实验目的练习多边形的裁剪算法二、实验要求(1)在同一坐标下画出原裁减多边形P和被裁剪多边形Q的图形;(2)编程用P中四条边依次对Q进行裁剪,并画出每次裁剪后的图形;(3)撰写实验报告并附上所用程序和结果。3、 实验内容用Sutherland-Hodgeman算法实现多边形的裁剪。已知裁剪多边形P的控制点为:-2,4,-2,-3,3,-3,3,4,被裁剪多边形Q的控制点为:-3,5,-3,2,2,-2,2,1,6,2,2,6实验程序:(1)Sutherland.m文件,调用了inside.m和intersect.m文件function f=Sutherland() figure(1); clf; P=-2,4;-2,-3;3,-3;3,4;-2,4; Q=-3,5;-3,2;2,-2;2,1;6,2;2,6;-3,5; subplot(3,2,1); plot(P(:,1),P(:,2),-) hold on; plot(Q(:,1),Q(:,2),-) Q1=Q; for i=1:4 Q2=; if(inside(Q1(1,:),P(i,:),i)=1) Q2=Q2;Q1(1,:); end for j=1:length(Q1)-1 if(inside(Q1(j,:),P(i,:),i)=1) if(inside(Q1(j+1,:),P(i,:),i)=1) Q2=Q2;Q1(j+1,:); else Q2=Q2;intersect(Q1(j,:),Q1(j+1,:),P(i:i+1,:); end else if(inside(Q1(j+1,:),P(i,:),i)=1) Q2=Q2;intersect(Q1(j+1,:),Q1(j,:),P(i:i+1,:); Q2=Q2;Q1(j+1,:); end end end subplot(3,2,i+1); plot(P(:,1),P(:,2),-) hold on; plot(Q2(:,1),Q2(:,2),-*) Q1=Q2;Q2(1,:); end end(2) inside.m文件function f=inside(Q,P,i)f=0; switch i case 1 if (Q(1)=P(1) f=1; end case 2 if(Q(2)=P(2) f=1; end case 3 if(Q(1)=P(1) f=1; end case 4 if(Q(2)=P(2) f=1; endendend (3)Intersect.m文件function f=intersect(Q1,Q2,P) %Q1在窗口内,Q2在窗口外,P为用于裁减的边 f=0,0; if P(1,2)=P(2,2) f(2)=P(1,2); f(1)=Q1(1)+(P(1,2)-Q1(2)*(Q2(1)-Q1(1)/(Q2(2)-Q1(2); else f(1)=P(1,1); f(2)=Q1(2)+(P(1,1)-Q1(1)*(Q2(2)-Q1(2)/(Q2(1)-Q1(1); endend实验结果: 南京信息工程大学 计算机图形学基础 实验报告实验名称: 图形几何变换 实验日期:2013.12.23 得分: 指导老师: 郭帅 系: 理学系 专业: 信息与计算科学 姓名: 吴春娇 学号: 201123140291、 实验目的练习图形几何变换的算法及实现二、实验要求(1)试将坐标原点移动到多边形P的重心;(2)将多边形P绕(2,-2)点顺时针旋转60度;(3)将多边形P分别向x方向错切2倍,向y方向错切1/2倍;(4)撰写实验报告并附上所用变换矩阵、程序和结果。3、 实验内容给定多边形P的控制点为:-3,5,-3,2,2,-2,2,1,6,2,2,6,对该多边形进行二维几何变换并画出变换后的图形。实验程序:#include#includeint j;float t33,pp52;void tf1(float sq,float cq,int xp,int yp) t00=cq; t01=sq; t02=0;t10=-sq;t11=cq; t12=0;t20=xp; t21=yp; t22=1;void tf2() float x,y;x=ppj0;y=ppj1;ppj0=x*t00+y*t10+t20;ppj1=x*t01+y*t11+t21;main()int gdriver,gmode,xp=300,yp=200;float p2=80,1,80,8,99,17,97,26,76,26;float i,t33;gdriver=DETECT;registerbgidriver(EGAVGA_driver);initgraph(&gdriver,&gmode,d:tc);setbkcolor(3);cleardevice();setcolor(9);circle(xp,yp,70);circle(xp,yp,20);circle(xp,yp,40);circle(xp,yp,5);circle(xp,yp,2);circle(xp,yp,45);setlinestyle(0,0,6);for(i=0;i6;i=i+0.3142)tf1(sin(i),cos(i),xp,yp);for(j=0;j5;j+)ppj0=pj0;ppj1=pj1;tf2();for(j=0;j4;j+)line(ppj0,ppj1,ppj+10,ppj+11);delay(10000);getch();closegraph();#include#includeint a144=30,0,0,1,30,40,0,1,0,40,0,1,0,40,10,1,0,30,30,1,0,0,30,1,30,0,30,1,30,10,30,1,10,10,30,1,10,30,30,1,10,40,10,1,10,10,10,1,30,10,10,1,30,40,10,1;float t44,p144;void a400()int i,j;for(i=0;i4;i+)for(j=0;j4;j+)tij=0;void a500() int k,i,j;for(i=0;i14;i+)for(j=0;j4;j+)pij=0;for(k=0;k4;k+)pij=pij+aik*tkj;pi0=pi0+280;pi1=-pi1+180;setcolor(9);moveto(p00,p01);for(i=0;i14;i+)lineto(pi0,pi1);line(p60,p61,p00,p01);line(p70,p71,p120,p121);line(p80,p81,p110,p111);line(p90,p91,p40,p41);line(p100,p101,p30,p31);line(p130,p131,p100,p101);line(p10,p11,p130,p131);getch();main()int driver,mode,i,j;driver=DETECT;initgraph(&driver,&mode,d:tc);setbkcolor(3);a400();t00=0.7071*3;t01=-0.4082*3;t10=-0.7071*3;t11=-0.4082*3;t21=0.8165*3;t33=1;a500();closegraph();南京信息工程大学 计算机图形学基础 实验报告实验名称: 三次Bezier曲线 实验日期:2013.12.23 得分: 指导老师: 郭帅 系: 理学系 专业: 信息与计算科学 姓名: 吴春娇 学号: 201123140291、 实验目的熟悉Bezier曲线的定义和画法。二、实验要求(1)用定义的方法计算出三次Bezier曲线的参数方程,再用参数方程化出图形;(2)用软件实现de Casteljau递推算法,并画出由上述控制多边形确定的Bezier曲线;(3)根据升阶公式算出升到四阶时的控制端点,并画出升阶后的Bezier曲线及其控制点。(4)撰写实验报告并附上所用程序及试验结果。3、 实验内容给定四点P1(-1,1),P2(0,0),P3(3,3)和P4(4,1),用其作为特征多边形来构造一条三次Bezier曲线。再根据升阶公式算出升到四阶时的控制端点,并画出升阶后的Bezier曲线及其控制点。实验程序:public function recursion( ctrlPts:Array, k:int , i:int ,t:Number ):Pointif ( k=0 ) return ctrlPtsi;return addPoints(multiplyNumToPoint(1 - t),recursion(ctrlPts, k-1, i, t),multiplyNumToPoint(t , recursion(ctrlPts, k-1, i+1, t);public function multiplyNumToPoint(n:Number,p:Point):Pointreturn new Point(p.x * n,p.y * n);public function addPoints(p1:Point,p2:Point):Pointreturn new Point(p1.x + p2.x,p1.y + p2.y);public function minusPoints(p1:Point,p2:Point):Pointreturn new Point(p1.x - p2.x,p1.y - p2.y);public function algorithm_deCasteljau(t:Number, ctrlPts:Array ):Pointvar size:int = ctrlPts.length;return recursion( ctrlPts, size-1, 0, t ); public function upgradePoints(ctrlPts:Array):Arrayvar si

温馨提示

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

评论

0/150

提交评论