




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告院系: 计算机科学与工程学院专业: 计算机科学与技术学生姓名: 陈守创学号: 1100310106指导老师: 张文辉2014年6月19号实验一基本图元的生成一、实验题目设计任意直线绘制程序,要求具有一定宽度。二、实验目的与实验要求:1、目的与任务:学习并掌握图形处理的数学模型和算法。2、实验基本要求:(1)利用所学算法原理(DDA、中点画线、Bresenham),编程绘制生成直线,并比较各种算法的差别。所用算法不限定哪种,但不能直接利用编程语言中的画线命令。(2)分别利用所学算法原理(中点画圆、Bresenham画圆),编程绘制圆。所用算法不限定哪种,但不能直接利用编程语言中的画圆命令。三:生成直线的DDA原理算法的基本思想是利用直线的微分方程来确定直线上的点的坐标。无论光栅显示器或绘图机都可以看成有一个网格存在。表示一条直线,就是要用靠近直线的一些网格点来代表这一直线。显示时要使这些点发出一定亮度。设直线的起点坐标Ps(xs,ys),终点坐标为Pe(xe,ye),令Δx=xe-xs,Δy=ye-ys,要绘的直线的微分方程是:(1.1)令Δt=max(|Δx|,|Δy|)(1.2)取时间步长为1/Δt,则可得式(1.1)的数值解的递推公式xi+1=xi+Δx/Δt,yi+1=yi+Δy/Δt(1.3)用式(1.3)可求得图中直线PsPe上三角形表示的点,但显示时要用象素(即图中网格结点)来表示,这要用舍入的办法来找到最靠近三角形表示的点的象素,用这些象素(图中圆表示的点)来表示直线。这个方法称为DDA方法。PPsPe图1.1图中圆点表示DDA法生成的直线四:实验代码#include"graphics.h"#include<stdio.h>voiddda(intx1,inty1,intx2,inty2){ intk,i,t; floatx,y,xincre,yincre; k=x2-x1; if(k<0){ k=-1*k; } t=y2-y1; if(t<0){ t=-1*t; } if(t>k){ k=t; } xincre=(x2-x1)/k; yincre=(y2-y1)/k; x=x1; y=y1; for(i=1;i<=k;i++){ putpixel(x,y,0); x=x+xincre; y=y+yincre; }}voidmain(){ initgraph(600,600); setbkmode(TRANSPARENT); cleardevice(); setbkcolor(WHITE); floodfill(0,0,100); dda(0,0,300,300); getchar(); }实验结果如下:五:实验心得通过本次实验,初步了解了计算机图形学在计算机图像处理,工程制作,平面设计上的应用,掌握了计算机绘制圆和直线的几种算法,DDA直线和圆的生成算法,并且理解和掌握了他们的优缺点,对图形学有了基本的了解.实验二图案设计一:实验题目采用旋转及比例变换的原理,编制并实现产生正方形螺旋线的程序(图2.24所示),使每个后继的正方形被旋转某一固定角度θ,且被缩小,同时使它包含于前一个正方形。二、实验目的与实验要求:1、目的与任务:学习并掌握几何图形的几何变换算法。2、实验基本要求:利用所学算法原理,编程对几何图形进行几何变换。三、实验原理分析图形分析从图案中可以分析出:但它是由基本图形(正方形)经过变换而构成的,由16个相似的方块拼接而成;每一个方块是一个由正方形形成的螺旋图案),而每个相邻方块的螺旋方向相反。假设逆时针旋转为正,顺时针旋转为负(反),则图案中螺旋方块的正、反拼接结构如下图所示。反正反正正反正反反正反正正反正反图2.25拼接规则组成整个图案的每个方块,是由正方形边旋转和缩小形成,且经过旋转和缩小的正方形的四个顶点刚好在前一个正方形的四条边上,四:实验代码#include"graphics.h"#include<stdio.h>#include<math.h>voidpolygon(intx0,inty0,floata,intn,floataf){ intx,y,i; floatdtheta,theta; if(n<3) return; a=a/1.4142; dtheta=6.28318/n; theta=af*0.0174533; x=x0+a*cos(theta); y=y0+a*sin(theta); moveto(x,y); for(i=1;i<=n;i++) { theta=theta+dtheta; x=x0+a*cos(theta); y=y0+a*sin(theta); lineto(x,y); }}main(){ inti=0,x=55,y=55; intgdriver=1,gmode=3; floata=100.0; floatb=-1; initgraph(410,410); setbkmode(TRANSPARENT); cleardevice(); setbkcolor(WHITE); floodfill(0,0,50); setcolor(0); floatdtheta=10.0*0.0174533; floatf=1.0/(cos(dtheta)+sin(dtheta)); a=100; for(intj=0;j<4;j++) { b=-1*b; for(intk=0;k<4;k++) { a=100.0/f; for(i=0;i<=20;i++) polygon(x+j*100,y+k*100,(a=a*f),4,45+i*10*b); b=-1*b; } } getchar(); closegraph();}实验结果如下:五:实验心得
通过本次试验,我学到了图形变换的基本方法,初步掌握实现二维图形的平移、旋转和缩放功能,加深了计算机图形学图形变化相关知识的理解.
实验三二维图形裁剪一:实验题目编程实现直线编码裁剪法。二、实验目的与实验要求:1、目的与任务:学习和掌握图形裁剪算法。2、实验基本要求:(1)利用所学裁剪算法原理(C-S裁剪、中点分割)编程,分别用Sutherland-Cohen、中点法对线段进行裁剪。(2)比较各种算法的差别三、实验原理Sutherland-Cohen算法该算法的思想是:对于每条线段P1P2分为三种情况处理。(1)若P1P2完全在窗口内,则显示该线段P1P2简称“取”之。(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。四:实验代码#include<graphics.h>#include<conio.h>#defineLEFT1#defineRIGHT2#defineBOTTOM4#defineTOP8#defineXL100#defineXR300#defineYB100#defineYT300voidencode(floatx,floaty,int*code){ intc=0; if(x<XL)c=c|LEFT; elseif(x>XR)c=c|RIGHT; if(y<YB)c=c|BOTTOM; elseif(y>YT)c=c|TOP; *code=c; return; }/*(x1,y1)与(x2,y2)是线段端点坐标,其它四个参数分别定义窗口的左,下,右,上边界*/voidC_S_LineCLip(floatx1,floaty1,floatx2,floaty2){ intcode1,code2,code; floatx,y; encode(x1,y1,&code1); encode(x2,y2,&code2); while((code1!=0)||(code2!=0)) { if((code1&code2)!=0)return; code=code1; if(code1==0)code=code2; if((LEFT&code)!=0)/*线段与左边界相交*/ { x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1); } elseif((RIGHT&code)!=0)/*线段与右边界相交*/ { x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1); } elseif((BOTTOM&code)!=0)/*线段与下边界相交*/ { y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1); } elseif((TOP&code)!=0)/*线段与上边界相交*/ { y=YT; x=x1+(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);} } line((int)x1,(int)y1,(int)x2,(int)y2); return;}voidmain(){ intgraphdriver=VGA; intgraphmode=VGAHI; initgraph(&graphdriver,&graphmode,"C:\\TC3.0\\BGI"); rectangle(XL,YB,XR, C_S_LineCLip(20,30,400,430); getch(); closegraph(); return;}实验结果如下:五:实验心得通过此次实验,我了解裁剪算法的基本原理。知道了如何快速的判断一条线段与窗口属何种关系,最终实现了直线的裁剪算法.还在比较高兴的.实验四样条曲线的绘制一、实验题目B-样条曲线生成:鼠标点击按钮区域的Spline按钮,弹出一个对话框。要给给出绘制B-样条曲线的控制多边形的顶点信息和B-样条曲线的阶数。比如要绘制一个四顶点的三阶B-样条曲线。以正方形为例:输入如下:(20,20)(200,20)(200,200)(20,200)程序首先根据输入的顶点绘制出控制多边形。然后绘制B-样条曲线。二、实验目的与实验要求:1、目的与任务:编程实现中点分割法绘制Bezier曲线。(1)、理解Bézier曲线和B样条曲线的定义、性质及绘制算法。(2)掌握VC的Bézier曲线和NURBS曲线的绘制方法。2、实验基本要求:(1)实验程序使用VC实现。(2)利用鼠标操作修改所绘制的曲线。单击右键结束控制点绘制并显示Bezier曲线。单击控制点可以选择控制点,这个时候可以通过拖拽移动控制点,同时Bezier曲线的变化也将反应;按键盘上的d可以删除控制点,i可以在这个控制点和下一个控制点的中点位置增加一个新的控制点。按c可以清除所有内容以重新绘制。通过上下键可以增加或者缩小阈值。三、实验原理B曲线绘制算法四:实验代码voidCMyView::OnDraw3bezier()//三次Bezier曲线{ RedrawWindow(); floatcoeff_x[4]; floatcoeff_y[4]; floatpoints_x[nPoints+1]; floatpoints_y[nPoints+1]; intdegree,i,j; degree=3; CClientDC*pdc=newCClientDC(this); CPenpen; pen.CreatePen(PS_SOLID,1,RGB(0,0XFF,0)); CPen*oldpen=(CPen*)pdc->SelectObject(&pen); pdc->TextOut(200,150,"三次Bezier曲线"); doubledelt; coeff_x[0]=10; coeff_x[1]=30; coeff_x[2]=40; coeff_x[3]=40; coeff_y[0]=10; coeff_y[1]=5; coeff_y[2]=13; coeff_y[3]=30; pdc->MoveTo(110,110); for(j=0;j<=degree;j++) pdc->LineTo(10+10*coeff_x[j],10+10*coeff_y[j]);delt=float(1.0/nPoints); doublet=0.0; pdc->MoveTo(110,110); for(i=0;i<=nPoints;i++){ points_x[i]=ThreeBezier(degree,coeff_x,t); points_y[i]=ThreeBezier(degree,coeff_y,t); t=t+delt; pdc->LineTo(10+10*points_x[i],10+10*points_y[i]); } deletepdc;}voidCMyView::OnDraw3bspline()//三次B样条曲线{RedrawWindow();CClientDC*pdc=newCClientDC(this);CPenpen;pen.CreatePen(PS_SOLID,1,RGB(0,0XFF,0));CPen*oldpen=(CPen*)pdc->SelectObject(&pen);pd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业租赁合同范本3
- 《通过面部特征洞察健康状况》课件
- 2025家电维修服务合同书
- 2025个体经营者租赁合同范文
- 2025物业房屋租赁合同范本
- 《船舶机械设备解析》课件
- (16)-专题16 小说阅读
- 消防员摘除马蜂窝的方法及处置程序
- 山东石油化工学院《制药工程学科前沿讲座》2023-2024学年第二学期期末试卷
- 上海工商职业技术学院《食品营养与安全》2023-2024学年第二学期期末试卷
- 2025年科技节活动小学科普知识竞赛题库及答案(共80题)
- 决胜新高考·四川名优校联盟2025届高三4月联考生物+答案
- 2025年元宇宙+游戏行业新兴热点、发展方向、市场空间调研报告
- 森林管护员面试题及答案
- 2025年高级考评员职业技能等级认定考试题(附答案)
- 培训课件:混凝土结构的施工技术(浇筑、养护)
- “中华传统文化经典研习”任务群下先秦诸子散文教学策略研究
- 2025年高考语文模拟作文导写及点评:社会时钟
- 《护理信息系统》课件
- 施工现场平面布置与临时设施、临时道路布置方案
- 建筑施工大型机械设备安全使用与管理培训
评论
0/150
提交评论