计算机图形学实验报告3.docx
- 文档编号:4528672
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:7
- 大小:46.66KB
计算机图形学实验报告3.docx
《计算机图形学实验报告3.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告3.docx(7页珍藏版)》请在冰豆网上搜索。
计算机图形学实验报告3
计算机图形学实验报告3
计算机图形学实验报告
实验名称二维图形的几何变换评分
实验日期2012年5月24日指导教师刘长松
姓名专业班级学号
一、实验目的
1、复习不同的二维坐标变换公式。
2、掌握二维坐标变换公式的使用方法。
3、对二维坐标组合变换的灵活运用。
二、实验要求
1、在屏幕上绘制出较简单的几何图形。
2、对1的图形进行平移变换,绘制出变换后的几何图形,并在下边标注出实施x,y各多少的平称坐标变换。
3、对1的图形进行旋转变换,绘制出变换后的几何图形,并在下边标注出实施多少度的旋转坐标变换。
4、对1的图形进行对称变换,绘制出变换后的几何图形,并在下边标注出实施对什么坐标进行的对称变换。
5、对1的图形进行错切变换,绘制出变换后的几何图形,并在下边标注出实施对何种坐标进行的错切变换。
6、对1的图形进行比例变换,绘制出变换后的几何图形,并在下边标注出实施的多少比例坐标变换。
7、为了进行比较,适当选择坐标,可将原图(变换前)及经过不同变换后的图形绘制在同一个屏幕上,设置不同的线形或颜色加以区分各种变换。
三、关键算法及实现原理
1、二维图形的变换实际上是一个变换矩阵,平面图形是由若干个二维点(xi,yi)组成,经过变换后的二维点(x’i,y’i),其变换公式为:
对应于不同的变换,都是用矩阵乘法来计算坐标,只需改变变换矩阵即可。
因此对每一种坐标变换编成一个子程序。
2、编程时的技巧
用数组将二维图形的特征坐标点(顶点)保存,将由特征坐标点(顶点)绘制出二维图形的命令编一个绘图子程序,调用绘图子程序绘制出变换以前的图形,根据不同的两维几何变换,选用相应二维坐标变换公式(调用相应的子程序)将二维坐标进行坐标变换;再调用绘图子程序将变换后的坐标值在屏幕上绘制变换后的几何将图形,可选用不同的颜来区分各种不同几何变换的图形。
四、程序调试中的问题
在调试的过程中,经常出现一些字符的错误及语法方面的错误,都是由于粗心造成的。
不过在静下心来,仔细检查反复查看也就解决了其中的问题。
五、程序运行结果或数据
六、实验收获及体会
此次试验是关于二维图形的转换,通过这次实验掌握了二维坐标变换公式的使用方法,知道了怎样对二维坐标组合变换的灵活运用。
比起仅仅只在课堂上听些理论知识,更进一步了解了这方面的知识,受益匪浅。
七、参考源程序(可附页)
#include
#include
#include
#include
doublexmax=639.0,ymax=399.0;
doublef[3][3],xx,yy;
intscx(doublexj)
{
intx;
x=(int)(xj+xmax/2);
return(x);
}
intscy(doubleyj)
{
inty;
y=int(ymax-(int)(yj+ymax/2));
return(y);
}
voidparallel(doubledx,doubledy)
{
f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0;
f[1][0]=0.0;f[1][1]=1.0;f[1][2]=0.0;
f[2][0]=dx;f[2][1]=dy;f[2][2]=1.0;
}
voidscale(doubles)
{
f[0][0]=s;f[0][1]=0.0;f[0][2]=0.0;
f[1][0]=0.0;f[1][1]=s;f[1][2]=0.0;
f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;
}
voidtaisho_y()
{
f[0][0]=-1.0;f[0][1]=0.0;f[0][2]=0.0;
f[1][0]=0.0;f[1][1]=1.0;f[1][2]=0.0;
f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;
}
voidaxis()
{
line(scx(0.0),scy(-ymax/2),scx(0),scy(ymax/2));
line(scx(-xmax/2),scy(0.0),scx(xmax/2),scy(0.0));
}
voidtuoq(doublea,doubleb)
{
f[0][0]=1.0;f[0][1]=b;f[0][2]=1.0;
f[1][0]=a;f[1][1]=1.0;f[1][2]=0.0;
f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;
}
doubleaffinex(doublex,doubley,doubled)
{
xx=x*f[0][0]+y*f[1][0]+d*f[2][0];
return(xx);
}
doubleaffiney(doublex,doubley,doubled)
{
yy=x*f[0][1]+y*f[1][1]+d*f[2][1];
return(yy);
}
voiddrawtu(doublex2[5],doubley2[5])
{
inti;
for(i=0;i<=3;i++)
{
line(scx(x2[i]),scy(y2[i]),scx(x2[i+1]),scy(y2[i+1]));
}
}
voidmain()
{intdrive=DETECT,mode;
staticdoublex1[]={50.0,60.0,150.0,160.0,50.0};
staticdoubley1[]={0.0,50.0,50.0,-10.0,0.0};
staticdoublex2[5],y2[5];
inti;
doublex,y,xx,yy,yt;
initgraph(&drive,&mode,"c:
\\tc3\\bgi");
setcolor(RED);
axis();
for(i=0;i<=3;i++)
{
line(scx(x1[i]),scy(y1[i]),scx(x1[i+1]),scy(y1[i+1]));
}
/*parallel(100,-100)*/
getch();
x=100;y=-100;
parallel(x,y);
setcolor(BLUE);
for(i=0;i<=4;i++)
{
x2[i]=affinex(x1[i],y1[i],1.0);
y2[i]=affiney(x1[i],y1[i],1.0);
}
drawtu(x2,y2);
yt=scy(y2[0])+10;
outtextxy(scx(x2[0]),yt,"parallel(100,-100)");
/*taisho_y()*/
getch();
taisho_y();
setcolor(YELLOW);
for(i=0;i<=4;i++)
{
x2[i]=affinex(x1[i],y1[i],1.0);
y2[i]=affiney(x1[i],y1[i],1.0);
}
drawtu(x2,y2);
yt=scy(y2[0])+10;
outtextxy(scx(x2[0]),yt,"taisho_y");
/*touq(2,0)*/
getch();
tuoq(2,0);
setcolor(LIGHTBLUE);
for(i=0;i<=4;i++)
{
x2[i]=affinex(x1[i],y1[i],1.0);
y2[i]=affiney(x1[i],y1[i],1.0);
}
drawtu(x2,y2);
yt=scy(y2[0])+10;
outtextxy(scx(x2[0]),yt,"tuoq(2,0)");
/*scale
(2)*/
getch();
scale
(2);
setcolor(LIGHTRED);
for(i=0;i<=4;i++)
{
x2[i]=affinex(x1[i],y1[i],1.0);
y2[i]=affiney(x1[i],y1[i],1.0);
}
drawtu(x2,y2);
yt=scy(y2[0])+10;
outtextxy(scx(x2[0]),yt,"scale2");
getch();
closegraph();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)