ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:150.88KB ,
资源ID:7827825      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7827825.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学实验全.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机图形学实验全.docx

1、计算机图形学实验全实验1 直线的绘制实验目的1、通过实验,进一步理解和掌握DDA和Bresenham算法;2、掌握以上算法生成直线段的基本过程;3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境计算机、Turbo C或其他C语言程序设计环境实验学时 2学时,必做实验。实验内容用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、把源程序以文件的形式提交;7

2、、按格式书写实验报告。实验代码:DDA:# include # include void DDALine(int x0,int y0,int x1,int y1,int color) int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)abs(dy) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k=epsl;k+) put

3、pixel(int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; main() int gdriver ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,C:TC20BGI); DDALine(0,0,35,26,4); getch ( ); closegraph ( );Bresenham:#include#includevoid BresenhamLine(int x0,int y0,int x1,int y1,int color) int x,y,dx,dy,e; dx=x1-x

4、0; dy=y1-y0; e=-dx;x=x0;y=y0; while(x0) y+; e=e-2*dx; main() int gdriver ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,c:TC20BGI); BresenhamLine(0, 0 , 120, 200,5 ); getch ( ); closegraph ( ); 实验2 圆和椭圆的绘制实验目的1、通过实验,进一步理解和掌握中点算法;2、掌握以上算法生成椭圆或圆的基本过程;3、通过编程,会在TC环境下完成用中点算法实现椭圆或圆的绘制。实验环境计算机、Tur

5、bo C或其他C语言程序设计环境实验学时 2学时,必做实验。实验内容用中点(Besenham)算法实现椭圆或圆的绘制。实验步骤1.算法、原理清晰,有详细的设计步骤; 2.依据算法、步骤或程序流程图,用C语言编写源程序;3.编辑源程序并进行调试;4.进行运行测试,并结合情况进行调整;5.对运行结果进行保存与分析;6.打印源程序或把源程序以文件的形式提交;7.按格式书写实验报告。分析与思考1为何在程序运行时,有的椭圆或圆仅在屏幕左上角显示了一部分?2用中点算法生成的椭圆,为何在半径较大时,图形的失真严重?实验代码:圆:#include#includevoid CirclePoint(int x,i

6、nt y,int color) putpixel(x+100,y+100,color); putpixel(-x+100,y+100,color); putpixel(x+100,-y+100,color); putpixel(-x+100,-y+100,color); putpixel(y+100,x+100,color); putpixel(y+100,-x+100,color); putpixel(-y+100,x+100,color); putpixel(-y+100,-x+100,color); void MidBresenhamCircle(int r,int color) int

7、 x,y,d; x=0;y=r;d=1-r; while(x=y) CirclePoint(x,y,color); if(d0) d+=2*x+3; else d+=2*(x-y)+5; y-; x+; main( ) int gdriver ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,c:tc20bgi ); MidBresenhamCircle(50,6); getch ( ); closegraph ( );实验截图:椭圆:#include graphics.hvoid MidBresenhamEllipse(int a

8、,int b,int color) int x,y; float d1,d2; x=0;y=b; d1=b*b+a*a*(-b+0.5); putpixel(x+100,y+100,color); putpixel(-x+100,-y+100,color); putpixel(-x+100,y+100,color);putpixel(x+100,-y+100,color); while(b*b*(x+1)a*a*(y-0.5) if(d10) if(d2=0) d2+=b*b*(2*x+2)+a*a*(-2*y+3); x+; y-; else d2+=a*a*(-2*y+3); y-; pu

9、tpixel(x+100,y+100,color); putpixel(-x+100,-y+100,color); putpixel(-x+100,y+100,color);putpixel(x+100,-y+100,color); main( ) int gdriver ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,c:tc20bgi ); MidBresenhamEllipse(8,6,2); getch ( ); closegraph ( );实验截图:实验3 图形填充实验目的4、通过实验,进一步理解和掌握图形填充常用算法

10、;5、掌握以上算法进行填充图形的基本过程;6、通过编程,会在TC环境下完成图形填充。实验环境计算机、Turbo C或其他C语言程序设计环境实验学时 2学时,必做实验。 实验内容任意画一个多边形,并用边填充算法进行填充。(多边形的顶点坐标存放在数组中,坐标值由键盘输入)实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。实验代码:#include#include#include#includ

11、e#define MP 100#include#define false 0void edge_mark(int arr2,int value,int polydeflen) int by,x,y,ax,ay; int i,j; float k; by=arrpolydeflen-11; for (i=0;i=0) putpixel(x,y,value); getch(); if(ayay;j-) putpixel(x+(int)(y-j)*k),j,value); else for(j=y+1;jay;j+) putpixel(x-(int)(j-y)*k),j,value); by=y;

12、void edge_mark_fill(int ar2,int value,int polydeflen) int i,x,y,inside; int min,max; inside=false; min=ar01;max=ar01; edge_mark(ar,value,polydeflen); for (i=1;imax) max=ari1; if (ari1min) min=ari1; for (y=min;y=max;y+) for(x=0;x=640;x+) if (getpixel(x,y) = value) inside=!(inside); if (inside!=false)

13、 putpixel(x,y,value); else putpixel(x,y,0); if(getch()=17) exit(1); void main() char t100; int polydefMP2; int i,j,gdriver,gmode,polydeflen,value; gdriver=DETECT; initgraph(&gdriver,&gmode,c:tc20bgi ); printf(please input the number of edges:n); scanf(%d,&polydeflen); printf(please input the color:n

14、); scanf(%d,&value); printf(please input the (x,y):n); for (i=0;ipolydeflen;i+) for (j=0;j2;j+) scanf(%d,&polydefij); printf(please press the space key!); edge_mark_fill(polydef,value,polydeflen); for(i=0;ipolydeflen;i+) sprintf(t,(%d,%d),polydefi0,polydefi1); outtextxy(polydefi0,polydefi1,t); getch

15、(); closegraph();实验截图:实验4 二维图形几何变换实验目的1、通过实验,进一步理解和掌握二维图形几何变换算法;2、掌握以上算法进行二维图形几何变换基本过程;3、通过编程,会在TC环境下完成二维图形几何变换过程。实验环境计算机、Turbo C或其他C语言程序设计环境实验学时 2学时,必做实验。 实验内容任意画一个平面图形,(1)按比例缩小或放大.缩放比例由用户定义,缩放的参考点由用户确定;(2)旋转.由键盘输入旋转角度和旋转中心。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合

16、情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。实验代码:#include stdio.h#include conio.h#includegraphics.h#include math.hstruct point int x; int y;triangle3;void ini() triangle0.x=30; triangle0.y=30; triangle1.x=30; triangle1.y=120; triangle2.x=120; triangle2.y=70; setcolor(RED); line(triangle0.

17、x,triangle0.y,triangle1.x,triangle1.y); line(triangle0.x,triangle0.y,triangle2.x,triangle2.y); line(triangle1.x,triangle1.y,triangle2.x,triangle2.y);void zoom(float sx,float sy) int xx3; int yy3; int i; for(i=0;i3;i+) xxi=(trianglei.x-triangle0.x)*sx+triangle0.x; yyi=(trianglei.y-triangle0.y)*sy+tri

18、angle0.y; for(i=0;i3;i+) line(xxi+120,yyi,xx(i+1)%3+120,yy(i+1)%3); getch(); setcolor(5); for(i=0;i3;i+) line(xxi+120,yyi,xx(i+1)%3+120,yy(i+1)%3); void turn(int x,int y,int a) int i; int xx3; int yy3; for(i=0;i3;i+) xxi=(trianglei.x-x)*cos(a)-(trianglei.y-y)*sin(a)+x; yyi=(trianglei.x-x)*sin(a)+(tr

19、ianglei.y-y)*cos(a)+y; for(i=0;i3;i+) line(xxi,yyi,xx(i+1)%3,yy(i+1)%3); getch(); setcolor(5); for(i=0;i3;i+) line(xxi,yyi,xx(i+1)%3,yy(i+1)%3); void main() int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,c:tc20bgi); ini(); getch(); setcolor(0); turn(120,70,-1); ini(); getch(); setcolor(0); zoom

20、(0.5,0.5); ini(); getch(); setcolor(0); zoom(3,3); ini(); getch(); closegraph();实验截图:实验5 二维图形裁剪实验目的1、通过实验,进一步理解和掌握二维图形裁剪常用算法;2、掌握以上算法进行二维图形裁剪的基本过程;3、通过编程,会在TC环境下完成二维图形裁剪过程。实验环境计算机、Turbo C或其他C语言程序设计环境实验学时 2学时,必做实验。 实验内容生成若干条直线段,由用户确定一个矩形裁剪窗口的位置和大小,保留窗口里的图形,抹去其余部分(使用Cohen-Sutherland算法)。(完成作业的同学可以用line

21、、setviewport函数再做该题)。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。实验代码:#includegraphics.h#includestdio.h#includemath.h#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8int x1=60,y1=60,x2=200,y2=200,x3=200,y3=

22、300,xl=30,xr=100,yb=100,yt=20;int encode(int x,int y,int*code) int c; c=0; if(xxr) c=RIGHT; if(yyb) c=BOTTOM; else if(yyt) c=TOP; if(x=xl|x=xr|y=yt|y=yb) c=0; *code=c;C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt) int x,y,code1,code2,code3,code; encode(x1,y1,&code1); encode(x2,y2,&code2); encode(x3,y3,

23、&code3); while(code1!=0|code2!=0) if(code1&code2!=0) return; code=code1; if(code1=0) code=code2; if(LEFT&code)!=0) x=x1; y=y1+(long)(y2-y1)*(xl-x1)/(x2-x1); else if(RIGHT&code)!=0) x=xr; y=y1+(long)(y2-y1)*(xr-x1/x2-x1); else if(BOTTOM&code)!=0) y=yb; x=x1+(long)(x2-x1)*(yb-y1)/(y2-y1); else if(TOP&

24、code)!=0) y=yt; x=x1+(long)(x2-x1)*(yt-y1)/(y2-y1); if(code=code1) x1=x; y1=y; encode(x,y,&code1); else x2=x; y2=y; encode(x,y,&code2); while(code1!=0|code3!=0) if(code1&code3!=0) return; code=code1; if(code1=0) code=code3; if(LEFT&code)!=0) x=x1; y=y1+(long)(y3-y1)*(xl-x1)/(x3-x1); else if(RIGHT&co

25、de)!=0) x=xr; y=y1+(long)(y3-y1)*(xr-x1/x3-x1); else if(BOTTOM&code)!=0) y=yb; x=x1+(long)(x3-x1)*(yb-y1)/(y3-y1); else if(TOP&code)!=0) y=yt; x=x1+(long)(x3-x1)*(yt-y1)/(y3-y1); if(code=code1) x1=x; y1=y; encode(x,y,&code1); else x3=x; y3=y; encode(x,y,&code3); while(code3!=0|code2!=0) if(code3&code2!=0) return; code=code3; if(code3=0) code=code2; if(LEFT&code)!=0) x=x3; y=y3+(long)(y2-y3)*(xl-x3)/(x2-x3); else if

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1