10、阵。若顺时针旋转时,θ角为负值。
4 设计实现
4.1 加载页面
void heard() //开始界面
{
int i;
printf("\n\n\n\n ");
printf(" 程序加载中 \n\n");
printf(" ");
Sleep(1000);//延时
for(i=0;i<35;i++)
{
printf(">");
Sleep(60);
}
Sleep(1000);//延时
system("cls");//清
11、屏
printf("\n\n\n\n ");
printf("\a\a");//一声响声
printf("→【加载完成】 ");
system("pause");//dos命令
system("cls");//清屏
fflush(stdin);//清除缓冲区
}
4.2画出三角形,并对三角形的三种变换进行选择
void sanjiao() //画三角形
{
initgraph(500,500);
line(25,50,50,50);
line(50,50,50,25
12、);
line(50,25,25,50);
getch(); // 按任意键继续
closegraph(); // 关闭图形界面
}
void sanjiaobianhuan()
{
int selsect;
do{
printf("\n\n");
printf(" 1.平移转换\t2.比例转换\n");
printf(" 3.旋转转换\t0.结束函数\n");
printf("\n\n");
printf("
13、 请输入你的选择:");
scanf("%d",&selsect);
switch(selsect){
case 0:break;
case 1:
pingyi_tu();break;
case 2:
bili_tu();break;
case 3:
xuanzhuan_tu();break;
}
}while(selsect!=0);
}
4.3 对三角形进行平移变换
void pingyi_tu() //三角形
14、平移变换
{
int Tx,Ty;
int x1,x2,x3,y1,y2,y3;
int a,b,c,d,e,f;
printf("请输入平移的量为(Tx,Ty):");
scanf("%d,%d",&Tx,&Ty);
//moverel(Tx,Ty);
printf("即要平移的量为:(%d,%d)\n",Tx,Ty);
x1=25+Tx;y1=50+Ty;
x2=50+Tx;y2=25+Ty;
x3=50+Tx;y3=50+Ty;
initgraph(500,500);//初始化绘图环境
line(25,
15、50,50,50);
line(50,50,50,25);
line(50,25,25,50);
Sleep(1000);
for(a=25,c=50,e=50;a<=Tx,c<=Tx,e<+Tx;a++,c++,e++)
{
setcolor(RGB(255,255,255));
line(a,50,c,50);
line(c,50,e,25);
line(e,25,a,50);
Sleep(10);
setcolor(RGB(0,0,0));
line(a,50,c,50);
l
16、ine(c,50,e,25);
line(e,25,a,50);
}
for(b=50,d=50,f=25;b<=Ty,d<=Ty,f<=Ty;b++,d++,f++)
{
setcolor(RGB(255,255,255));
line(a,b,c,d);
line(c,d,e,f);
line(e,f,a,b);
Sleep(10);
setcolor(RGB(0,0,0));
line(a,b,c,d);
line(c,d,e,f);
line(e,f,a,b);
}
setcolor(RGB(255
17、255,255));
line(25,50,50,50);
line(50,50,50,25);
line(50,25,25,50);
setcolor(RGB(255,0,0));
line( a,b,c,d);
line( c,d,e,f);
line( e,f,a,b);
getch();
closegraph();//函数用于关闭图形环境。
}
4.4 对三角形进行比例变换
void bili_tu() //三角形比例变换
{
int Sx,Sy;
int x1,x2,x3
18、y1,y2,y3;
printf("请输入比例的量为(Sx,Sy):");
scanf("%d,%d",&Sx,&Sy);
printf("即要按比例转换的量为:(%d,%d)\n",Sx,Sy);
x1=25*Sx;y1=50*Sy;
x2=50*Sx;y2=50*Sy;
x3=50*Sx;y3=25*Sy;
initgraph(500,500);//初始化绘图环境
line(25,50,50,50);
line(50,50,50,25);
line(50,25,25,50);
Sleep(1000);
s
19、etcolor(RGB(255,0,0));
line( x1,y1,x2,y2);
line( x1,y1,x3,y3);
line( x2,y2,x3,y3);
getch();//延时
closegraph();//函数用于关闭图形环境
}
4.5 对三角形进行旋转变换
void xuanzhuan_tu() //三角形旋转变换
{
int a;
int x1,x2,x3,y1,y2,y3;
printf("请输入要旋转的弧度制:");
scanf("%d",
20、a);
x1=(int)(25*cos(a)-50*sin(a)); y1=(int)(25*sin(a)+50*cos(a));
x2=(int)(50*cos(a)-50*sin(a)); y2=(int)(50*sin(a)+50*cos(a));
x3=(int)(50*cos(a)-25*sin(a)); y3=(int)(50*sin(a)+25*cos(a));
initgraph(500,500);//初始化绘图环境
line(25,50,50,50);
line(50,50,50,25);
line(50,25,25,5
21、0);
Sleep(1000);
setcolor(RGB(255,0,0));
line( x1,y1,x2,y2);
line( x1,y1,x3,y3);
line( x2,y2,x3,y3);
getch();//延时
closegraph();//函数用于关闭图形环境
}
4.6 画出所要的矩形,并对选择需要的变换
void juxing() //画矩形
{
initgraph(500,500);
line(25,25,25,50);
lin
22、e(25,50,60,50);
line(60,50,60,25);
line(60,25,25,25);
getch();
closegraph();
}
void juxingbianhuan() //矩形变换
{
int selsect;
do{
printf("\n\n");
printf(" 1.平移转换\t2.比例转换\n");
printf(" 3.旋转转换\t0.结束函数\n");
23、printf("\n\n");
printf(" 请输入你的选择:");
scanf("%d",&selsect);
switch(selsect){
case 0:break;
case 1:
pingyitu();break;
case 2:
bilitu();break;
case 3:
xuanzhuantu();break;
}
}while(selsect!=0);
}
4.7 矩形进行平移变换
void pingyitu()
24、 //矩形平移变换
{
int Tx,Ty;
int a,b,c,d;
int x1,x2,x4,x3,y1,y2,y3,y4;
printf("请输入平移的量(Tx,Ty):");
scanf("%d,%d",&Tx,&Ty);
x1=25+Tx;y1=25+Ty;
x2=25+Tx;y2=50+Ty;
x3=60+Tx;y3=50+Ty;
x4=60+Tx;y4=25+Ty;
initgraph(500,500);//初始化绘图环境
line(25,25,25,50);
line(25,50,60,
25、50);
line(60,50,60,25);
line(60,25,25,25);
Sleep(1000);
for(a=25,c=60;a<=x1,c<=x3;a++,c++)
{
setcolor(RGB(255,255,255));
line(a,25,a,50);
line(a,50,c,50);
line(c,50,c,25);
line(c,25,a,25);
Sleep(10);
setcolor(RGB(0,0,0));
line(a,25,a,50);
line(a,50,c,50)
26、
line(c,50,c,25);
line(c,25,a,25);
}
for(b=25,d=50;c<=y1,d<=y3;b++,d++)
{
setcolor(RGB(255,255,255));
line(a,b,a,d);
line(a,d,c,d);
line(c,d,c,b);
line(c,b,a,b);
Sleep(10);
setcolor(RGB(0,0,0));
line(a,b,a,d);
line(a,d,c,d);
line(c,d,c,b);
27、line(c,b,a,b);
}
setcolor(RGB(255,255,255));
line(25,25,25,50);
line(25,50,60,50);
line(60,50,60,25);
line(60,25,25,25);
setcolor(RGB(255,0,0));
line( x1,y1,x2,y2);
line( x2,y2,x3,y3);
line( x3,y3,x4,y4);
line( x4,y4,x1,y1);
getch();//延时
closegraph();//函数用于关闭
28、图形环境
}
4.8 矩形进行比例变换
void bilitu() //矩形比例变换
{
int Sx,Sy;
int x1,x2,x3,x4,y1,y2,y3,y4;
x1=x2=x3=x4=y1=y2=y3=y4=0;
printf("请输入比例的量为(Sx,Sy):");
scanf("%d,%d",&Sx,&Sy);
printf("即要按比例转换的量为:(%d,%d)\n",Sx,Sy);
x1=25*Sx;y1=25*Sy;
x2=25*Sx;y2=50*Sy;
29、x3=60*Sx;y3=50*Sy;
x4=60*Sx;y4=25*Sy;
initgraph(500,500);//初始化绘图环境
line(25,25,25,50);
line(25,50,60,50);
line(60,50,60,25);
line(60,25,25,25);
Sleep(1000);
line( x1,y1,x2,y2);
line( x1,y1,x4,y4);
line( x2,y2,x3,y3);
line( x3,y3,x4,y4);
getch();//延时
closeg
30、raph();//函数用于关闭图形环境
}
4.9 矩形进行旋转变换
void xuanzhuantu() //矩形旋转变换
{
int a;
int x1,x2,x3,y1,y2,y3,x4,y4;
printf("请输入要旋转的弧度制:");
scanf("%d",&a);
x1=(int)(25*cos(a)-25*sin(a)); y1=(int)(25*sin(a)+25*cos(a));
x2=(int)(25*cos(a)-50*sin(a)); y2=(int)(25*sin(a)+5
31、0*cos(a));
x3=(int)(60*cos(a)-50*sin(a));y3=(int)(60*sin(a)+50*cos(a));
x4=(int)(60*cos(a)-25*sin(a));y4=(int)(60*sin(a)+25*cos(a));
initgraph(500,500);//初始化绘图环境
line(25,25,25,50);
line(25,50,60,50);
line(60,50,60,25);
line(60,25,25,25);
Sleep(1000);
setcolor(RGB(255,0,0));
32、 line( x1,y1,x2,y2);
line( x1,y1,x4,y4);
line( x2,y2,x3,y3);
line( x3,y3,x4,y4);
getch();//延时
closegraph();//函数用于关闭图形环境
}
4.10 圆对圆形进行变换选择
void yuan() //画圆
{
initgraph(500,500);
circle(250,250,50);
getch();
closegraph();
}
void yuanbianhu
33、an() //圆变换
{
int selsect;
do{
printf("\n\n");
printf(" 1.平移转换\n");
printf(" 2.比例变换\n");
printf(" 0.退出\n");
printf("\n\n");
printf(" 请输入你的选择:");
scanf("%d",&selsect);
switch(selsect){
34、
case 0:break;
case 1:
yuanpingyi();break;
case 2:
yuanbili();break;
}
}while(selsect!=0);
}
4.11 画出的圆形进行平移
void yuanpingyi() //圆平移
{
int Tx,Ty;
int x,y;
int i,j;
printf("请输入平移的量(x,y):");
scanf("%d,%d",&Tx,&Ty);
x=250+T
35、x;y=250+Ty;
initgraph(500,500);
circle(250,250,50);
Sleep(1000);
for(i=251;i<=x;i++){
setcolor(RGB(255,255,255));
circle(i,250,50);
Sleep(10);
setcolor(RGB(0,0,0));
circle(i, 250, 50);
}
for(j=251;j<=y;j++)
{
setcolor(RGB(255,255,255));
circle
36、i, j,50);
Sleep(10);
setcolor(RGB(0,0,0));
circle(i, j, 50);
}
setcolor(RGB(255,0,0));
circle(i,j,50);
getch();
closegraph();
}
4.12对画出的圆形进行比例变换
void yuanbili() //圆比例变换
{
int S;
int x;
printf("请输入比例的量为:");
scanf("%d"
37、S);
x=50*S;
initgraph(500,500);
circle(250,250,50);
Sleep(1000);
setcolor(RGB(255,0,0));
circle(250,250,x);
getch();
closegraph();
}
4.13主程序
void main()
{
int selsect;
heard();//程序开始界面
do{
printf("\n\n");
printf(" 1.画三角形\n");
38、
printf(" 2.三角形变换\n");
printf(" 3.画矩形\n");
printf(" 4.矩形变换\n");
printf(" 5.画圆\n");
printf(" 6.圆的变换\n");
printf(" 0.退出系统\n");
printf("\n\n");
printf(" 请输入你的选择:");
scanf("%d",&sels
39、ect);
switch(selsect){
case 0:exit(0);
case 1:
sanjiao();break;
case 2:
sanjiaobianhuan();break;
case 3:
juxing();break;
case 4:
juxingbianhuan();
case 5:
yuan();break;
case 6:
yuanbianhuan();break;
default:break;
40、
}
}while(selsect!=0);
}
5.运行结果
5.1 加载页面
如图5-1、5-2所示
图5-1正在加载
图5-2加载完成
5.2:目录界面进行选择。
如图5-3所示
图4-3选择界面
5.3三角形变换
选择1画出三角形再选择2进入变换界面完成图形变换(白色为原图,红色为平移后的图)。如图5-4所示
图5-4选择自己需要的选项
5.3.1 选择1进行平移变换。
如图5-5所示
图5-5三角形经过平移后
5.3.2 选择2进行比例变换
如图5-
41、6所示
图5-6 三角形经过缩放后的图像
5.3.3 选择3进行旋转
如图5-7所示
图5-7三角形经过旋转后的图像
5.4 选择3画出矩形
再选择4进行图形变换(白色为原图,红色为平移后的图),如图5-8所示
图5-8 选择4后进入举行变换的界面
5.4.1 选择1进行平移变换
如图5-9所示
图5-9矩形经过平移后的图像
5.4.2 进行比例变换
如图5-10所示
图5-10对矩形进行缩放
5.4.3 进行旋转变换
如图5-11所示
图5-11对矩形进行旋转
5.5选择5画出圆
在选择6进行图形变换(白色为原图,红色为平移后的图)
42、如图5-12所示
图5-12选择6进入远的选择界面
5.5.1 选择1进行平移变换
如图5-13所示
图5-13 对圆进行平移
5.5.2 选择2进行比例变换
如图5-14所示
图5-13对圆进行扩大后
5.6选择7实现随机点的连线绘制
选择1确定,之后再选择随机出现点数,我们选择随机点为30,如图5-14所示,
图5-14 先选择7之后的选择界面
5.6.1选择输入30个随机点后,敲回车键,得到如图5-15所示
图5-15随机连线后(注:图片中每条线的颜色都是随机产生的)
6 学年设计总结与体会
6.1总结
经过这么多天的不懈努力我们最
43、终成功完成了老师教给我们的任务。首先我们以点对点的方式将需要的两点相连,完成了画出二维图形的基本操作,然后我们又通过各种C语言函数实现了图形平移、缩放、旋转等变换!最后在老师的提议下我们做起了动态图形变换,经过反复修正,我们实现了这一变换!
6.2 体会
经过二个月的奋斗,这次学年设计终于做完了。通过这次设计我们也着实又感受了一次编程的乐趣,从中也学到了不少知识。
感受最深的一点是:以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。现在编程感觉完全不同了。在编写一个程序之前,先对这个课程设计进行了一下分析,写出总体流程
44、以及细节流程,以使得自己的思路更加的清晰。然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。
另外,我还体会到C语言课程的重要性。只有真正理解各种函数的好处,才能用好C语言这门博大的学科。
通过这次课程设计逐渐提高了自己的程序设计和调试能力,我以前对大一些的程序一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。在这次实验中我终于克服了这一障碍,一遍遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊!
这次试验也让我看到了自己的不足。还有许多关于C++的一些比较具体的东西还不太懂,比方说文件。这次试验还让我们意识到只有不断的在电脑上调试程序,自己的水平才能得
45、到提高。
我会继续我们的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步和提高。
在此我要感谢赵瑞斌老师在数据结构及课程设计中对我们的指引和帮助。
7 致谢
感谢赵瑞斌的指导几个组员的积极配合,才有此次课程设计的成功。在这里我也感谢所有给予我们关心帮助的老师,希望以后有更多的机会来锻炼自己的综合素质,为以后的学习、生活打下良好的基础。在这次课程设计中也暴露了我们的一些缺点,基础知识不够扎实,我们会在以后的日子里加以改正,更好地配合来提高自己综合能力!
参考文献:
[1] 何钦铭,颜晖. C语言程序设计[M], 北京:高等教育出版社,2012.
[2] 网络资源库, 百度文库.
评语:
评阅教师签名: 年 月 日
成 绩
22