计算机图形学图形几何变换实现Word文档格式.docx
- 文档编号:16012582
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:132.64KB
计算机图形学图形几何变换实现Word文档格式.docx
《计算机图形学图形几何变换实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机图形学图形几何变换实现Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
整体比例变换:
其中s为在xyz方向的等比例系数。
S>
1时,整体缩小;
s<
1时,整体放大。
(2)旋转变换:
旋转变换的角度方向为(沿坐标轴的反方向看去,各轴按逆时针方向旋转)
绕z轴旋转:
绕x轴旋转:
绕y轴旋转:
程序代码:
/*三维图形(立方体)旋转变换、比例变换*/
#include<
stdio.h>
math.h>
graphics.h>
conio.h>
time.h>
ctype.h>
#defineZOOM_IN0.9
#defineZOOM_OUT1.1
intturn1[3];
/*[0]rx,[1]ry,[3]zoom*/
typedefstruct
{
floatx;
floaty;
floatz;
}point;
}point2d;
typedefstruct
floath;
pointbiao[8];
}fanti;
voidmake_box(floatx,floaty,floath,fanti*p)
p->
x=x;
p->
y=y;
h=h;
biao[0].x=x/2;
biao[0].y=y/2;
biao[0].z=h/2;
biao[1].x=-x/2;
biao[1].y=y/2;
biao[1].z=h/2;
biao[2].x=-x/2;
biao[2].y=-y/2;
biao[2].z=h/2;
biao[3].x=x/2;
biao[3].y=-y/2;
biao[3].z=h/2;
biao[4].x=x/2;
biao[4].y=y/2;
biao[4].z=-h/2;
biao[5].x=-x/2;
biao[5].y=y/2;
biao[5].z=-h/2;
biao[6].x=-x/2;
biao[6].y=-y/2;
biao[6].z=-h/2;
biao[7].x=x/2;
biao[7].y=-y/2;
biao[7].z=-h/2;
}
voidtrun2d(point*p,point2d*q)
q->
x=p->
x+p->
z*cos(0.25);
y=p->
y+p->
z*sin(0.25);
voidinitm(floatmat[][4])
intcount;
for(count=0;
count<
4;
count++)
{
mat[count][0]=0.;
mat[count][1]=0.;
mat[count][2]=0.;
mat[count][3]=0.;
mat[count][count]=1.;
}
return;
voidtransfrom(point*p,point*q,floattm[][4])
floatxu,yv,zw,h;
xu=tm[0][0]*p->
x+tm[1][0]*p->
y+tm[2][0]*p->
z+tm[3][0];
yv=tm[0][1]*p->
x+tm[1][1]*p->
y+tm[2][1]*p->
z+tm[3][1];
zw=tm[0][2]*p->
x+tm[1][2]*p->
y+tm[2][2]*p->
z+tm[3][2];
x=xu;
y=yv;
z=zw;
voidrotationx(point*p,floatalfa,floattm[][4])
floatrad=0.0174532925;
initm(tm);
tm[1][1]=cos(rad*alfa);
tm[1][2]=sin(rad*alfa);
tm[2][1]=-tm[1][2];
tm[2][2]=tm[1][1];
voidrotationz(point*p,floatalfa,floattm[][4])
tm[0][0]=cos(rad*alfa);
tm[0][1]=sin(rad*alfa);
tm[1][0]=-tm[0][1];
tm[1][1]=tm[0][0];
voidrotationy(point*p,floatalfa,floattm[][4])
tm[2][0]=sin(rad*alfa);
tm[0][2]=-tm[2][0];
tm[2][2]=tm[0][0];
voidadjust(point*p,point*q)
floatt[4][4];
switch(turn1[0])
case1:
rotationy(p,2,t);
transfrom(p,q,t);
break;
case-1:
rotationy(p,-2,t);
default:
break;
switch(turn1[1])
rotationz(p,2,t);
rotationz(p,-2,t);
switch(turn1[2])
q->
x=ZOOM_IN*p->
x;
y=ZOOM_IN*p->
y;
z=ZOOM_IN*p->
z;
q->
x=ZOOM_OUT*p->
y=ZOOM_OUT*p->
z=ZOOM_OUT*p->
voiddrawbox(fanti*p)
point2dfan2d[8];
inti;
for(i=0;
i<
=7;
i++)
adjust(&
biao[i],&
biao[i]);
trun2d(&
fan2d[i]);
fan2d[i].x+=300;
fan2d[i].y+=200;
cleardevice();
outtext("
->
:
right<
-:
left^:
upv:
down"
);
moveto(0,20);
pageup:
zoominpagedown:
zoomoutspace:
RedrawEsc:
exit"
for(i=0;
=3;
{
if(i==3)
{
line(fan2d[i].x,fan2d[i].y,fan2d[0].x,fan2d[0].y);
line(fan2d[i+4].x,fan2d[i+4].y,fan2d[4].x,fan2d[4].y);
}
else
line(fan2d[i].x,fan2d[i].y,fan2d[i+1].x,fan2d[i+1].y);
line(fan2d[i+4].x,fan2d[i+4].y,fan2d[i+5].x,fan2d[i+5].y);
line(fan2d[i].x,fan2d[i].y,fan2d[i+4].x,fan2d[i+4].y);
}
voidmain()
intgd=DETECT,gm,i,j;
charkey;
floatx,y,h;
fantia1;
x=100;
y=100;
h=100;
initgraph(&
gd,&
gm,"
"
setcolor(GREEN);
make_box(x,y,h,&
a1);
for(;
;
)
turn1[0]=0;
turn1[1]=0;
turn1[2]=0;
key=getch();
switch(key)
{
case77:
turn1[0]=1;
break;
/*RIGHT*/
case75:
turn1[0]=-1;
/*LIFT*/
case72:
turn1[1]=1;
/*UP*/
case80:
turn1[1]=-1;
/*DOWN*/
case73:
turn1[2]=1;
/*ZoomIn*/
case81:
turn1[2]=-1;
/*ZoomOut*/
case32:
/*Redraw*/
case27:
exit(0);
break;
default:
key=0;
}
if(key!
=0)drawbox(&
closegraph();
五、实验结果:
原始图形:
左右旋转图形:
上下旋转图形:
放大图形:
六、实验体会:
在老师的细心指导下,利用本实验完成了在计算机中实现三维立体图形的缩放旋转,对立体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 图形 几何 变换 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)