




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告学院: 班级: 学号:姓名: 学院名称专业班级学号学生姓名实验日期成绩课程名称计算机图形学实验名称实验一 维基本图形生成的算法实现一、实验目的:1通过实验,进一步理解和掌握DDA和中点算法,Bresenham算法;2掌握DDA和中点算法,Bresenham算法算法生成直线段的基本过程;掌握中点算法生成圆的基本过程;3通过编程,会在VC+环境下完成用DDA或中点算法实现直线段的绘制。通过编程,会在VC+环境下完成用中点算法实现圆的绘制。4掌握二维图形显示原理;二、实验环境:普通PC386以上微机; VC+语言程序设计环境。三、实验内容:1、用DDA算法、中点算法或Besenham算法实现直线段的绘制。2、用中点算法或Besenham算法实现圆的绘制。3、对各种算法进行效率及效果的分析和比较;四、实验源码: DDA算法:void CmyView: OnDDAline() CDC* pDC=GetDC();/获得设备指针 int xa= ,ya= ,xb= ,yb= ,c=RGB(255,0,0);int x,y;float dx,dy,k;dx=(float)(xb-xa),dy=(float)(yb-ya);k=dy/dx;y=ya;if(abs(k)1) for(x=xa;xSetPixel(x, int(y+0.5),c); y=y+k;else for (y=ya;ySetPixel(int(x+0.5),y,c);x=x+1/k;ReleaseDC(pDC);/中点生成直线算法void CmyView: OnMidPointline() CDC* pDC=GetDC();/获得设备指针 int xa= ,ya= ,xb= ,yb= ,c=RGB(255,0,0); float a,b,d1,d2,d,x,y; a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*a+b; x=xa,y=ya; pDC-SetPixel(x,y,c); while(xxb) if (dSetPixel(x, y,c);ReleaseDC(pDC);中点画圆算法:void CMyView:OnMidpointCircle()CDC *pDC=GetDC();int xc= ,yc= ,r = ,c=0;int x,y;float d;x=0,y=r,d=1.25-r;描点(x,y)以及其他七个对称点;while(x=y) if(dIsKindOf(RUNTIME_CLASS(CDdaDoc);return (CDdaDoc*)m_pDocument;#endif /_DEBUG/ CDdaView message handlersvoid CDdaView:OnDDAline() CDC* pDC=GetDC();/获得设备指针 int xa=0 ,ya=0 ,xb=200 ,yb= 200 ,c=RGB(255,0,0); float a,b,d1,d2,d,x,y; a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*a+b; x=xa,y=ya; pDC-SetPixel(x,y,c); while(xxb) if (dSetPixel(x, y,c);ReleaseDC(pDC);void CDdaView:Onprintcircle() / TODO: Add your command handler code hereCDC *pDC=GetDC();int c=RGB(255,0,0);int x=23,r=500;float d=5-4*r;/pDC-SetPixel(x,r,c);CirclePoint(x,r,c,pDC);while(rx)if(dSetPixel(x,r,c);ReleaseDC(pDC);void CDdaView:CirclePoint(int x, int r, int c, CDC *pDC) pDC-SetPixel(x, r,c); pDC-SetPixel(x, -r,c); pDC-SetPixel(-x, r,c); pDC-SetPixel(-x, -r,c); pDC-SetPixel(r, x,c); pDC-SetPixel(r, -x,c); pDC-SetPixel(-r, x,c); pDC-SetPixel(-r, -x,c);void CDdaView:OnMidPiontline() / TODO: Add your command handler code here CDC* pDC=GetDC();/获得设备指针 int xa=100 ,ya=30 ,xb=500 ,yb=600 ,c=RGB(255,0,0); float a,b,d1,d2,d,x,y; a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*a+b; x=xa,y=ya; pDC-SetPixel(x,y,c); while(xxb) if (dSetPixel(x, y,c);ReleaseDC(pDC);void CDdaView:OnMidPiontCircle() / TODO: Add your command handler code hereCDC *pDC=GetDC();int c=RGB(255,0,0);int x=40,r=200;float d=5-4*r;/pDC-SetPixel(x,r,c);CirclePoint(x,r,c,pDC);while(rx)if(dSetPixel(x,r,c);ReleaseDC(pDC);五、实验结果:六、总结:通过该实验,了解了VC下图形编程的基本方法。 初步了解了MFC编程的机制。实验地点指导教师学院名称计算机科学与技术专业班级学号学生姓名实验日期成绩课程名称计算机图形学实验名称实验二 二维图形的裁剪一、实验目的:1、通过实验,进一步理解和掌握Cohen_Sutherland 裁剪算法;2、掌握用Cohen_Sutherland 裁剪算法裁减多边形的基本过程; 3、通过编程,会在VC+环境下用Sutherland_Hogman 算法编程实现用矩形窗口对多边形的裁剪。二、实验环境:普通PC386以上微机; VC+语言程序设计环境。三、实验内容:用Cohen_Sutherland 算法编程实现用矩形窗口对直线的裁剪。四、算法思想:编码算法:本算法分为三个步骤:判断线段两端是否都在窗口内,如果是,线段完全可见;否则判断线段是否显然不可见,如果是,裁剪结束。否则求线段与窗口边延长线的交点,此线段将线段分为两段,其中一段不可见,舍弃。对余下的线段继续进行递归裁剪。算法的编码是进行二进制位运算,若顶点在窗口内,则二进制编码为0000;否则进行编码。五、实现步骤:(1) 这种算法利用编码的方法,延长窗口边线,使得它们把包含未经裁剪图形的窗口平面区域分成九个区域:(2)每个区域用一个4位编码CtCbCrCl来表示,代码中每一位分别是0或1,是按照窗口边线来确定的,下面给出具体的编码规则,其中最右边的位Cl是第一位,依次Cr第二、Cb第三、Ct第四位。 A、当两端点P1(x1,y1)和P2(x2,y2)在区域0000中,即满足点的裁剪不 等式: B、当两个端点在窗口边线外的同侧位置,则他们的四位代码中,有一相同位,同时位“1”,显然两个端点代码C1和C2按位与运算 C1&C20 .由此可检查判断直线在窗口外,应全部舍弃。 C、果直线两端点不满足上述两种情况,不能简单地全部保留或全部舍弃直线时,则需要计算出直线与窗口边线的交点,将直线分段后继续进行检查判断。这样可以逐段地舍弃位于窗口外地线段,保留剩余在窗口内的线段。五、源码:/*定义裁剪函数*/void line_clip(int x1, int y1, int x2, int y2, int left,int top,int right, int bottom) void getcode(int x,int y,int d4); /*定义获得端点的代码函数*/ int i,x11,y11; /*定义交点坐标*/ int aa=1; getcode(x1,y1,a); getcode(x2,y2,b); /*1:裁剪循环开始*/ while(aa!=0) if(a0+a1+a2+a3=0)&(b0+b1+b2+b3=0) /*第一种情况线段完全可见*/ aa=0; return; else if(a0&b0)+(a1&b1)+(a2&b2)+(a3&b3)!=0) /*线段完全不可见*/ setcolor(0); setwritemode(0); /*设置画线的输出模式为覆盖方式*/ line(x1,y1,x2,y2); /*进行裁剪 也就是进行覆盖*/ aa=0; return; /*2:线段即不完全可见,也不完全不可见,即与边有交点的线段的裁剪处理*/ else if(a0+a1+a2+a3=0) /*寻找不可见点*/ for(i=0;i4;i+) ci=bi;/*x2,y2为不可见点*/ else for(i=0;i4;i+) ci=ai;/*x1,y1为不可见点*/ /*3:直线与窗口边作求交运算,求出交点赋值给x11、y11*/ if(c0=1) x11=left; y11=(int)(y2-y1)*(left-x1)/(x2-x1)+y1); else if(c1=1) x11=right; y11=(int)(y2-y1)*(right-x1)/(x2-x1)+y1); else if(c2=1) x11=(int)(x2-x1)*(bottom-y1)/(y2-y1)+x1); y11=bottom; else if(c3=1) x11=(int)(x2-x1)*(top-y1)/(y2-y1)+x1); y11=top; /*3:求交运算结束*/ if(c0=a0)&(c1=a1)&(c2=a2)&(c3=a3) setcolor(0); setlinestyle(0,0,3); setwritemode(0); line(x1,y1,x11,y11); x1=x11; y1=y11; getcode(x11,y11,a); else if(c0=b0)&(c1=b1)&(c2=b2)&(c3=b3) setcolor(0); setlinestyle(0,0,3); setwritemode(0); line(x2,y2,x11,y11); x2=x11;y2=y11; getcode(x11,y11,b); /*2:与边有交点的线段裁剪处理结束*/ /*1:裁剪循环结束*/*获得端点代码*/void getcode(int x,int y,int d4) d0=0;d1=0;d2=0;d3=0; if(xright) d1=1; if(ybottom) d2=1; if(ytop) d3=1; return;六、总结:通过实验,理解了二维图形裁剪算法Sutherland_Hogman的基本原理;理解了图形裁剪的作用。实验地点指导教师学院名称计算机科学与技术专业班级学号学生姓名实验日期2010年5月28日成绩课程名称计算机图形学实验名称实验三 图形的基本几何变换一、实验目的:1掌握二维和三维图形基本的几何变换原理及变换矩阵;2掌握矩阵运算的程序设计。3使用VC+编程环境实现图形几何变换;二、实验环境:普通PC386以上微机; VC+语言程序设计环境。三、实验内容:1在VC+编程环境下建立二维图形并实现该图形的基本变换,包括平移、旋转、比例。2在VC+编程环境下建立三维立方体,并实现其基本变换。四、算法思想:二维图形的缩放、旋转,平移,组合变换在齐次坐标理论下,二维图形几何变换矩阵可用下式表示:平移变换:x* y* 1 =x y 1 * =t*x s*y 1 比例变换:x* y* 1=x y 1 * =m+x n+y 1 旋转变换:在 平面上的二维图形饶原点逆时针旋转角,变换矩阵为 x* y* 1=x y 1 * = x*cos-y*sin 复合变换:以上各种变换矩阵都是以原点为参照点,当以任意参照点进行变换的时候,我们就要用到复合变换矩阵。 算法实现: 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();五、总结:通过实验,了解了二维图形基本变换的方法已经变换在图形绘制中的作用。实验地点指导教师学院名称计算机科学与技术专业班级学号学生姓名实验日期2010年5月28日成绩课程名称图形学实验名称实验四 VC+图形程序设计一、实验目的:1掌握VC+ 进行图形程序设计的基本方法;2了解VC+ 的图形功能,了解常见的图形库函数,请读者参见VC+帮助;3能设计较复杂的动、静态图形。二、实验环境:普通PC386以上微机; VC+语言程序设计环境。三、实验内容:1 图形系统初始化;2 综合应用VC+ 中图形库函数,进行图形设计与绘制;3 完成具有一定主题意义的静态或动态图形的设计与绘制。四、实验源码:#include #include #include # include #include main()srand(time(0);int x1,x2,y1,y2,m,n,d=50;float a,e,f,pi=3.14159;int gdriver=DETECT,gmode;initgraph(&gdriver,&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025畜牧饲养管理合同模板
- 2025版权授权全案打包合作合同模板
- 第十二课 班级美食展说课稿-2025-2026学年小学信息技术(信息科技)六年级下册教科版(云南)
- 2025上海标准的公租房买卖合同
- 黑龙江公务员考试真题2025
- 2025智能解决方案代理合同专业版(合同版本)
- 1.2同位角、内错教、同旁内角 说课稿- -2024-2025学年浙教版数学七年级下册
- 2025安心食品供应链合同
- 2025中外专有技术许可合同合同学堂
- 机械厂工伤医疗救治规定
- 咖啡基础培训课件
- 人才服务合同书
- 2025年工会财务大赛理论题库(附答案)
- 2025-2026学年统编版八年级上册道德与法治教学计划含教学进度表
- 牛津9AU3-Head-to-head名师制作优质教学课件
- 小学数学西南师大四年级上册二加减法的关系和加法运算律《减法的运算性质》教学设计
- 通信光缆线路工程安全技术交底大全
- 购牛合同参考参考
- 纳迪亚之宝全流程攻略 100%完结完整通关指南
- 第四讲政府间关系
- GB 30678-2014 客车用安全标志和信息符号(高清版)
评论
0/150
提交评论