计算机图形学报告.docx

上传人:b****5 文档编号:8728429 上传时间:2023-05-14 格式:DOCX 页数:13 大小:95.35KB
下载 相关 举报
计算机图形学报告.docx_第1页
第1页 / 共13页
计算机图形学报告.docx_第2页
第2页 / 共13页
计算机图形学报告.docx_第3页
第3页 / 共13页
计算机图形学报告.docx_第4页
第4页 / 共13页
计算机图形学报告.docx_第5页
第5页 / 共13页
计算机图形学报告.docx_第6页
第6页 / 共13页
计算机图形学报告.docx_第7页
第7页 / 共13页
计算机图形学报告.docx_第8页
第8页 / 共13页
计算机图形学报告.docx_第9页
第9页 / 共13页
计算机图形学报告.docx_第10页
第10页 / 共13页
计算机图形学报告.docx_第11页
第11页 / 共13页
计算机图形学报告.docx_第12页
第12页 / 共13页
计算机图形学报告.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机图形学报告.docx

《计算机图形学报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学报告.docx(13页珍藏版)》请在冰点文库上搜索。

计算机图形学报告.docx

计算机图形学报告

 

计算机图形学

 

学院:

班级:

学号:

姓名:

 

学院名称

专业班级

学号

学生姓名

实验日期

成绩

课程名称

计算机图形学

实验名称

实验一维基本图形生成的算法实现

一、实验目的:

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();

}

五、实验结果:

六、总结:

通过图形程序的调试,激发了对图形学的兴趣,了解了图形学绘制图形的效果。

 

实验地点

指导教师

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2