计算机图形学实验报告3Word格式.docx
《计算机图形学实验报告3Word格式.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告3Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
3、对1的图形进行旋转变换,绘制出变换后的几何图形,并在下边标注出实施多少度的旋转坐标变换。
4、对1的图形进行对称变换,绘制出变换后的几何图形,并在下边标注出实施对什么坐标进行的对称变换。
5、对1的图形进行错切变换,绘制出变换后的几何图形,并在下边标注出实施对何种坐标进行的错切变换。
6、对1的图形进行比例变换,绘制出变换后的几何图形,并在下边标注出实施的多少比例坐标变换。
7、为了进行比较,适当选择坐标,可将原图(变换前)及经过不同变换后的图形绘制在同一个屏幕上,设置不同的线形或颜色加以区分各种变换。
三、关键算法及实现原理
1、二维图形的变换实际上是一个变换矩阵,平面图形是由若干个二维点(xi,yi)组成,经过变换后的二维点(x’i,y’i),其变换公式为:
对应于不同的变换,都是用矩阵乘法来计算坐标,只需改变变换矩阵即可。
因此对每一种坐标变换编成一个子程序。
2、编程时的技巧
用数组将二维图形的特征坐标点(顶点)保存,将由特征坐标点(顶点)绘制出二维图形的命令编一个绘图子程序,调用绘图子程序绘制出变换以前的图形,根据不同的两维几何变换,选用相应二维坐标变换公式(调用相应的子程序)将二维坐标进行坐标变换;
再调用绘图子程序将变换后的坐标值在屏幕上绘制变换后的几何将图形,可选用不同的颜来区分各种不同几何变换的图形。
四、程序调试中的问题
在调试的过程中,经常出现一些字符的错误及语法方面的错误,都是由于粗心造成的。
不过在静下心来,仔细检查反复查看也就解决了其中的问题。
五、程序运行结果或数据
六、实验收获及体会
此次试验是关于二维图形的转换,通过这次实验掌握了二维坐标变换公式的使用方法,知道了怎样对二维坐标组合变换的灵活运用。
比起仅仅只在课堂上听些理论知识,更进一步了解了这方面的知识,受益匪浅。
七、参考源程序(可附页)
#include<
graphics.h>
conio.h>
dos.h>
math.h>
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[1][1]=s;
f[2][0]=0.0;
f[2][1]=0.0;
voidtaisho_y()
f[0][0]=-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][1]=b;
f[0][2]=1.0;
f[1][0]=a;
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];
doublex,y,xx,yy,yt;
initgraph(&
drive,&
mode,"
c:
\\tc3\\bgi"
);
setcolor(RED);
axis();
for(i=0;
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);
=4;
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()*/
taisho_y();
setcolor(YELLOW);
taisho_y"
/*touq(2,0)*/
tuoq(2,0);
setcolor(LIGHTBLUE);
tuoq(2,0)"
/*scale
(2)*/
scale
(2);
setcolor(LIGHTRED);
scale2"
getch();
closegraph();