学年设计报告.docx

上传人:b****8 文档编号:9311501 上传时间:2023-05-18 格式:DOCX 页数:32 大小:545.25KB
下载 相关 举报
学年设计报告.docx_第1页
第1页 / 共32页
学年设计报告.docx_第2页
第2页 / 共32页
学年设计报告.docx_第3页
第3页 / 共32页
学年设计报告.docx_第4页
第4页 / 共32页
学年设计报告.docx_第5页
第5页 / 共32页
学年设计报告.docx_第6页
第6页 / 共32页
学年设计报告.docx_第7页
第7页 / 共32页
学年设计报告.docx_第8页
第8页 / 共32页
学年设计报告.docx_第9页
第9页 / 共32页
学年设计报告.docx_第10页
第10页 / 共32页
学年设计报告.docx_第11页
第11页 / 共32页
学年设计报告.docx_第12页
第12页 / 共32页
学年设计报告.docx_第13页
第13页 / 共32页
学年设计报告.docx_第14页
第14页 / 共32页
学年设计报告.docx_第15页
第15页 / 共32页
学年设计报告.docx_第16页
第16页 / 共32页
学年设计报告.docx_第17页
第17页 / 共32页
学年设计报告.docx_第18页
第18页 / 共32页
学年设计报告.docx_第19页
第19页 / 共32页
学年设计报告.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学年设计报告.docx

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

学年设计报告.docx

学年设计报告

学年设计报告

 

设计题目:

 用C语言实现简单2D图形的绘制和变换

作者姓名:

 王兴超王天祥张涛朱龙飞席晓东 

所学专业:

     网络工程专业

指导老师:

 赵瑞斌

 

2012年9月2号

学年设计任务书

学年设计题目

 用C语言实现简单2D图形的绘制和变换

组长

王兴超

学号

2011211311

班级

11网工

(二)班

组别

软件第二组

专业

网络工程

组员

王兴超、王天祥、张涛、朱龙飞、席晓东

指导教师

赵瑞斌

学年设计目的

合理运用所学专业课(C语言)设计一些小程序来解决实际问题

学年设计所需环境

微机房YF3503

学年设计任务要求

利用C语言编写代码进行图形变换

学年设计工作进度计划

序号

起止日期

工作内容

分工情况

1

8.25

分析题目,从指导老师获取信息

全体成员

2

8.26

找到绘制简单二维图形的方法

王兴超,张涛,王天祥,朱龙飞

3

8.27

8.28

讨论一些简单变换的思路,实行平移,比例与旋转变换

席晓东查找资料,王兴超,张涛代码实现

4

8.28

总体界面与主函数的设计

朱龙飞,王天祥,席晓东

5

8.30

对代码进行整体测试修改

王兴超,张涛

6

8.31

9.1

完成设计报告

王兴超,朱龙飞,王天祥

教研室审核意见:

 

教研室主任签字:

年月日

 

目录

摘要1

1绪论2

1.1设计背景与意义2

1.2系统结构2

2问题描述2

3分析3

3.1平移变换3

3.2比例变换3

3.3旋转变换3

4设计实现4

4.1加载页面4

4.2画出三角形4

4.3对三角形进行平移变换5

4.4对三角形进行比例变换7

4.5对三角形进行旋转变换8

4.6画出所要的矩形9

4.7矩形进行平移变换10

4.8矩形进行比例变换12

4.9矩形进行旋转变换13

4.10圆对圆形进行变换选择13

4.11画出的圆形进行平移14

4.12对画出的圆形进行比例变换16

4.13主程序16

5.运行结果17

5.1加载页面17

5.2目录界面进行选择18

5.3三角形变换18

5.3.1选择1进行平移变换。

19

5.3.2选择2进行比例变换20

5.3.3选择3进行旋转20

5.4选择3画出矩形20

5.4.1选择1进行平移变换21

5.4.2进行比例变换21

5.4.3进行旋转变换22

5.5选择5画出圆22

5.5.1选择1进行平移变换23

5.5.2选择2进行比例变换23

6学年设计总结与体会24

6.1总结24

6.2体会24

7致谢25

参考文献:

25

用C语言实现简单2D图形的绘制和变换

UsingClanguagetoachieveasimple2Dgraphicsrenderingandtransform

摘要

在计算机绘图的过程中,二维图形的绘制是绘制许多图形的基础,研究计算机图形的生成必须从研究二维图形开始。

计算机绘制图形时,无论图形多么复杂,都是利用一些相应图形基元经过图形变换组成的。

在计算机绘图中,经常用到图形变换,图形变换是指图形信息经过几何变换后产生新的图形。

基本的几何变换研究物体坐标在直角坐标系内的平移、旋转和变比等规则。

本文主要介绍二维图形的一些基本变换规则及其应用。

关键词:

平移,旋转,缩放

ABSTRACT

Incomputergraphics,theprocessof2dgraphicsrenderingmoregraphicsdrawingisthebasis,researchofcomputergraphicsgenerationmuststartfromthe2dgraphics.Computergraphics,nomatterhowcomplex,graphicsareusingsomecorrespondinggraphicelementcomposedbygraphicaltransformation.Incomputergraphics,oftenusegraphicstransformation,graphicstransformreferstothegraphicalinformationthroughafternewgraphicsgeometrytransform.Thebasicresearchobjectcoordinategeometrytransformincartesiancoordinatesystemintranslation,rotationandchangerulesthanetc.Thispapermainlyintroducessomebasictransformationof2dgraphicsanditsapplicationintherules.Keywords:

Translation,Rotating,Scaling

 

1绪论

1.1设计背景与意义

目前,很多软件对二维图形变换程序的需求逐渐增大,而且二维图形的应用也正逐渐向各个方向渗透。

在这样的形式下这就要求我们计算机专业的学生们能够实现这一基本变换,以更好的应对这一方面计算机应用的发展。

利用C语言实现二维图形的变换不仅可以实现日常生活中常见图片的变换,而且可以实现各种二维图形的绘制,这也就为我们的生活提供了许多的便利。

1.2系统结构

整体流程:

图1.2整体流程图

2问题描述

二维图形的几种典型变换,二维图形由点或者是直线段组成,直线段可由其端点坐标定义,二维图形的集合变换实际是对点或者是对直线段端点在变换矩阵的作用下实现的。

设P=[xy]是原来的点,P’=[x’y’]是变换后的点,则几种典型的变换如下:

(a)平移变换:

(b)比例变换:

(c)旋转变换:

3分析

我们小组对问题进行了深刻的讨论,确定了用点对点连线的方式来确定一个简单的二维图形,如三角形和矩形。

然后对已确定的点进行操作以实现各种图形变换。

3.1平移变换

若图形上一点P(x,y)沿x轴平移l距离,沿y轴平移m距离后成为新的图形上一点P'(x',y'),则有

        x'=x+l

        y'=y+m

  式中l,m不全为零,这称为平移变换。

3.2比例变换

设图形上一点P(x,y),经比例变换后成为新的菜上一点P'(x',y'),即有

     x'=a*x

     y'=d*y

式中a,d为比例因子

  将此比例变换式写成矩阵式得

  

这里

叫做比例变换矩阵。

若a=d,则x,y坐标按同一比例变换。

当a=d>1时,图形

放大;当0

若a≠d,则x,y坐标按各自不同比例变换。

3.3旋转变换

设图形上一点P(x,y)绕原点逆时针旋转θ角后成为新的图形上一点P'(x',y'),则由解析几何方法可得

        x'=xcosθ+ysinθ

        y'=-xsinθ+ycosθ

  用矩阵表示为

这里

为绕原点逆时针变换矩阵。

若顺时针旋转时,θ角为负值。

4设计实现

4.1加载页面

voidheard()//开始界面

{

inti;

printf("\n\n\n\n");

printf("程序加载中\n\n");

printf("");

Sleep(1000);//延时

for(i=0;i<35;i++)

{

printf(">");

Sleep(60);

}

Sleep(1000);//延时

system("cls");//清屏

printf("\n\n\n\n");

printf("\a\a");//一声响声

printf("→【加载完成】");

system("pause");//dos命令

system("cls");//清屏

fflush(stdin);//清除缓冲区

}

4.2画出三角形,并对三角形的三种变换进行选择

voidsanjiao()//画三角形

{

initgraph(500,500);

line(25,50,50,50);

line(50,50,50,25);

line(50,25,25,50);

getch();//按任意键继续

closegraph();//关闭图形界面

}

voidsanjiaobianhuan()

{

intselsect;

do{

printf("\n\n");

printf("1.平移转换\t2.比例转换\n");

printf("3.旋转转换\t0.结束函数\n");

printf("\n\n");

printf("请输入你的选择:

");

scanf("%d",&selsect);

switch(selsect){

case0:

break;

case1:

pingyi_tu();break;

case2:

bili_tu();break;

case3:

xuanzhuan_tu();break;

}

}while(selsect!

=0);

}

4.3对三角形进行平移变换

voidpingyi_tu()//三角形平移变换

{

intTx,Ty;

intx1,x2,x3,y1,y2,y3;

inta,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,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);

line(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,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对三角形进行比例变换

voidbili_tu()//三角形比例变换

{

intSx,Sy;

intx1,x2,x3,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);

setcolor(RGB(255,0,0));

line(x1,y1,x2,y2);

line(x1,y1,x3,y3);

line(x2,y2,x3,y3);

getch();//延时

closegraph();//函数用于关闭图形环境

}

4.5对三角形进行旋转变换

voidxuanzhuan_tu()//三角形旋转变换

{

inta;

intx1,x2,x3,y1,y2,y3;

printf("请输入要旋转的弧度制:

");

scanf("%d",&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,50);

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画出所要的矩形,并对选择需要的变换

voidjuxing()//画矩形

{

initgraph(500,500);

line(25,25,25,50);

line(25,50,60,50);

line(60,50,60,25);

line(60,25,25,25);

getch();

closegraph();

}

voidjuxingbianhuan()//矩形变换

{

intselsect;

do{

printf("\n\n");

printf("1.平移转换\t2.比例转换\n");

printf("3.旋转转换\t0.结束函数\n");

printf("\n\n");

printf("请输入你的选择:

");

scanf("%d",&selsect);

switch(selsect){

case0:

break;

case1:

pingyitu();break;

case2:

bilitu();break;

case3:

xuanzhuantu();break;

}

}while(selsect!

=0);

}

4.7矩形进行平移变换

voidpingyitu()//矩形平移变换

{

intTx,Ty;

inta,b,c,d;

intx1,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,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);

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

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();//函数用于关闭图形环境

 

}

4.8矩形进行比例变换

voidbilitu()//矩形比例变换

{

intSx,Sy;

intx1,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;

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();//延时

closegraph();//函数用于关闭图形环境

}

4.9矩形进行旋转变换

voidxuanzhuantu()//矩形旋转变换

{

inta;

intx1,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)+50*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));

line(x1,y1,x2,y2);

line(x1,y1,x4,y4);

line(x2,y2,x3,y3);

line(x3,y3,x4,y4);

getch();//延时

closegraph();//函数用于关闭图形环境

}

4.10圆对圆形进行变换选择

voidyuan()//画圆

{

initgraph(500,500);

circle(250,250,50);

getch();

closegraph();

}

voidyuanbianhuan()//圆变换

{

intselsect;

do{

printf("\n\n");

printf("1.平移转换\n");

printf("2.比例变换\n");

printf("0.退出\n");

printf("\n\n");

printf("请输入你的选择:

");

scanf("%d",&selsect);

switch(selsect){

case0:

break;

case1:

yuanpingyi();break;

case2:

yuanbili();break;

}

}while(selsect!

=0);

}

4.11画出的圆形进行平移

voidyuanpingyi()//圆平移

{

intTx,Ty;

intx,y;

inti,j;

printf("请输入平移的量(x,y):

");

scanf("

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

当前位置:首页 > 经管营销 > 经济市场

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

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