计算机图形学报告.docx
- 文档编号:23200557
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:13
- 大小:95.35KB
计算机图形学报告.docx
《计算机图形学报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学报告.docx(13页珍藏版)》请在冰豆网上搜索。
计算机图形学报告
计算机图形学
实
验
报
告
学院:
班级:
学号:
姓名:
学院名称
专业班级
学号
学生姓名
实验日期
成绩
课程名称
计算机图形学
实验名称
实验一维基本图形生成的算法实现
一、实验目的:
1.通过实验,进一步理解和掌握DDA和中点算法,Bresenham算法;
2.掌握DDA和中点算法,Bresenham算法算法生成直线段的基本过程;掌握中点算法生成圆的基本过程;
3.通过编程,会在VC++环境下完成用DDA或中点算法实现直线段的绘制。
通过编程,会在VC++环境下完成用中点算法实现圆的绘制。
4.掌握二维图形显示原理;
二、实验环境:
普通PC386以上微机;VC++语言程序设计环境。
三、实验内容:
1、用DDA算法、中点算法或Besenham算法实现直线段的绘制。
2、用中点算法或Besenham算法实现圆的绘制。
3、对各种算法进行效率及效果的分析和比较;
四、实验源码:
DDA算法:
voidCmyView:
:
OnDDAline()
{
CDC*pDC=GetDC();
1”此可检查判断直线在窗口外,应全部舍弃。
C、果直线两端点不满足上述两种情况,不能简单地全部保留或全部舍弃直线时,则需要计算出直线与窗口边线的交点,将直线分段后继续进行检查判断。
这样可以逐段地舍弃位于窗口外地线段,保留剩余在窗口内的线段。
五、源码:
/*********定义裁剪函数************/
voidline_clip(intx1,inty1,intx2,inty2,intleft,inttop,intright,intbottom)
{
voidgetcode(intx,inty,intd[4]);/*定义获得端点的代码函数*/
inti,x11,y11;/*定义交点坐标*/
intaa=1;
getcode(x1,y1,a);
getcode(x2,y2,b);
/*1:
裁剪循环开始*/
while(aa!
=0)
{
if((a[0]+a[1]+a[2]+a[3]==0)&&(b[0]+b[1]+b[2]+b[3]==0))/*第一种情况线段完全可见*/
{
aa=0;
return;
}
elseif((a[0]&&b[0])+(a[1]&&b[1])+(a[2]&&b[2])+(a[3]&&b[3])!
=0)/*线段完全不可见*/
{
setcolor(0);
setwritemode(0);/*设置画线的输出模式为覆盖方式*/
line(x1,y1,x2,y2);/*进行裁剪也就是进行覆盖*/
aa=0;
return;
}
/*2:
线段即不完全可见,也不完全不可见,即与边有交点的线段的裁剪处理*/
else
{
if(a[0]+a[1]+a[2]+a[3]==0)/*寻找不可见点*/
{
for(i=0;i<4;i++)
c[i]=b[i];/*x2,y2为不可见点*/
}
else
{
for(i=0;i<4;i++)
c[i]=a[i];/*x1,y1为不可见点*/
}
/*3:
直线与窗口边作求交运算,求出交点赋值给x11、y11*/
if(c[0]==1)
{
x11=left;
y11=(int)((y2-y1)*(left-x1)/(x2-x1)+y1);
}
elseif(c[1]==1)
{
x11=right;
y11=(int)((y2-y1)*(right-x1)/(x2-x1)+y1);
}
elseif(c[2]==1)
{
x11=(int)((x2-x1)*(bottom-y1)/(y2-y1)+x1);
y11=bottom;
}
elseif(c[3]==1)
{
x11=(int)((x2-x1)*(top-y1)/(y2-y1)+x1);
y11=top;
}/*3:
求交运算结束*/
if((c[0]==a[0])&&(c[1]==a[1])&&(c[2]==a[2])&&(c[3]==a[3]))
{
setcolor(0);
setlinestyle(0,0,3);
setwritemode(0);
line(x1,y1,x11,y11);
x1=x11;y1=y11;
getcode(x11,y11,a);
}
elseif((c[0]==b[0])&&(c[1]==b[1])&&(c[2]==b[2])&&(c[3]==b[3]))
{
setcolor(0);
setlinestyle(0,0,3);
setwritemode(0);
line(x2,y2,x11,y11);
x2=x11;y2=y11;
getcode(x11,y11,b);
}
}/*2:
与边有交点的线段裁剪处理结束*/
}/*1:
裁剪循环结束*/
}
/*获得端点代码*/
voidgetcode(intx,inty,intd[4])
{
d[0]=0;d[1]=0;d[2]=0;d[3]=0;
if(x if(x>right)d[1]=1; if(y>bottom)d[2]=1; if(y return; } 六、总结: 通过实验,理解了二维图形裁剪算法Sutherland_Hogman的基本原理;理解了图形裁剪的作用。 实验地点 指导教师 学院名称 计算机科学与技术 专业班级 学号 学生姓名 实验日期 2010年5月28日 成绩 课程名称 计算机图形学 实验名称 实验三图形的基本几何变换 一、实验目的: 1.掌握二维和三维图形基本的几何变换原理及变换矩阵; 2.掌握矩阵运算的程序设计。 3.使用VC++编程环境实现图形几何变换; 二、实验环境: 普通PC386以上微机;VC++语言程序设计环境。 三、实验内容: 1.在VC++编程环境下建立二维图形并实现该图形的基本变换,包括平移、旋转、比例。 2.在VC++编程环境下建立三维立方体,并实现其基本变换。 四、算法思想: 二维图形的缩放、旋转,平移,组合变换 在齐次坐标理论下,二维图形几何变换矩阵可用下式表示: 平移变换: [x*y*1]=[xy1]* =[t*xs*y1] 比例变换: [x*y*1]=[xy1]* =[m+xn+y1] 旋转变换: 在平面上的二维图形饶原点逆时针旋转Ө角,变换矩阵为 [x*y*1]=[xy1]* =[x*cosө-y*sinө] 复合变换: 以上各种变换矩阵都是以原点为参照点,当以任意参照点进行变换的时 候,我们就要用到复合变换矩阵。 算法实现: voidtf1(floatsq,floatcq,intxp,intyp) {t[0][0]=cq;t[0][1]=sq;t[0][2]=0; t[1][0]=-sq;t[1][1]=cq;t[1][2]=0; t[2][0]=xp;t[2][1]=yp;t[2][2]=1; } voidtf2() {floatx,y; x=pp[j][0];y=pp[j][1]; pp[j][0]=x*t[0][0]+y*t[1][0]+t[2][0]; pp[j][1]=x*t[0][1]+y*t[1][1]+t[2][1]; } main() { intgdriver,gmode,xp=300,yp=200; floatp[][2]={{80,1},{80,8},{99,17},{97,26},{76,26}}; floati,t[3][3]; 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;i<6;i=i+ {tf1(sin(i),cos(i),xp,yp); for(j=0;j<5;j++) {pp[j][0]=p[j][0];pp[j][1]=p[j][1];tf2();} for(j=0;j<4;j++) line(pp[j][0],pp[j][1],pp[j+1][0],pp[j+1][1]); 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)); intx1,x2,y1,y2,m,n,d=50; floata,e,f,pi=; intgdriver=DETECT,gmode; initgraph(&gdriver,&gmode,"\\tc"); setbkcolor(BLUE); /*长瓣花型图*/ for(a=0;a<=2*pi;a+=pi/720) { e=d*(1+*cos(8*a)); f=e*(1+sin(16*a)); x1=150+f*cos(a); x2=150+f*cos(a+pi/16); y1=140-f*sin(a); y2=140-f*sin(a+pi/16); for(n=0;n<=320;n++) { m=rand(); setcolor(m); line(x1,y1,x2,y2); } } /*六瓣花型图*/ for(a=0;a<=2*pi;a+=pi/300) { e=d*(1+*cos(3*a)); f=e*(1+sin(6*a)); x1=200+f*cos(a); x2=200+f*cos(a+pi/6); y1=350-f*sin(a); y2=350-f*sin(a+pi/6); for(n=0;n<=200;n++) { m=rand(); setcolor(m); line(x1,y1,x2,y2); } } /*摹尔图*/ for(a=0;a<=2*pi;a+=pi/240) { f=80*(1+*cos*a)*sin*a)); x1=450+f*cos(a); x2=450+f*cos(a+pi/4); y1=230-f*sin(a); y2=230-f*sin(a+pi/4); for(n=0;n<=200;n++) { setcolor(14); line(x1,y1,x2,y2); } } getch(); closegraph(); } 五、实验结果: 六、总结: 通过图形程序的调试,激发了对图形学的兴趣,了解了图形学绘制图形的效果。 实验地点 指导教师
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)