正弦函数的图形表示.doc

上传人:laozhun 文档编号:2887510 上传时间:2023-03-01 格式:DOC 页数:28 大小:110.50KB
返回 下载 相关 举报
正弦函数的图形表示.doc_第1页
第1页 / 共28页
正弦函数的图形表示.doc_第2页
第2页 / 共28页
正弦函数的图形表示.doc_第3页
第3页 / 共28页
正弦函数的图形表示.doc_第4页
第4页 / 共28页
正弦函数的图形表示.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《正弦函数的图形表示.doc》由会员分享,可在线阅读,更多相关《正弦函数的图形表示.doc(28页珍藏版)》请在三一办公上搜索。

1、沈 阳 航 空 工 业 学 院 课程设计学 号 _200604021119_班 级 _6402104_ 姓 名 _李百川_指导教师 _刘成_2007年 月 日课程设计任务书院系:电子工程系 专业:电子信息工程 班级:6402104学号:200604021119题目:正弦函数的图形表示一、课程设计时间2007年9月10日至2007年9月14日,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:在图形模式下,绘制正弦函数sin(x)在x1x2之间的图形。注意:此程序必须用TC2.0编写。三、课程设计要求1. 程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便。

2、 用户界面中的菜单至少应包括“输入x的区间”、“开始绘制”、“退出”3项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_刘成_ 学生签名:_李百川_五、成绩:六、教师评语: 目录一、需求分析二、程序流程图三、核心技术的实现说明及相应程序段四、个人总结五、参考文献六、源程序一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三大模块,其中他们的功能分别是:绘制图象(Strat Up)、函数参数的设定(Settings)、退出(Quit

3、)。在这些函数当中,绘制图象(Strat Up)又包括菜单栏的绘制,函数图形及坐标轴的绘制和函数的缩放与移动;函数参数的设定(Settings)包括函数Y=ASin(Bx)+C的参数A、B、C及X的区间MinXMaxX.二、程序流程图 整体框架图 Y=ASin(Bx)+C开 始输入目录选项Start Now(绘图) Settings (参数设定)Quit(退出)0.Set A (参数A的设定)1.Set B (参数B的设定)2.Set C (参数C的设定)3.Set MinX (X的最小值)4.Set MaxX (X的最大值)5.Back (返回)输入函数Y=ASin(Bx)+C的各项参数A、

4、B、C及X的区间范围MinXMaxX的值void StartUp() Initialize(); Start(); Draw();Pause();void Initialize()int GD=VGA; int GM=VGAHI; int ErrorC; clrscr(); initgraph(&GD,&GM,); ErrorC=graphresult(); if (ErrorC!=0) printf(Graphics System ERROR); exit(1); cleardevice();void Start() setcolor(RED); settextstyle(TRIPLEX_F

5、ONT,0,9); outtextxy(120,180,Welcome); setcolor(YELLOW); settextstyle(0,0,1); outtextxy(6,470,Press Any Key.); getch(); cleardevice(); setfillstyle(SOLID_FILL,7); setlinestyle(0,0,1); bar(0,0,639,479); setfillstyle(SOLID_FILL,BLUE); bar(1,1,638,12); Title(Function Graphics V0.1); DrawRect(3,465,636,4

6、76); DrawMenuBar(); Inform(Ready!); /*/int ScreenX(double x)/*数学座标转换为屏幕坐标*/ return (316+ZOOM*x+RX*ZOOM);int ScreenY(double y) return (211-ZOOM*y+RY*ZOOM);绘制函数图象及功能模块图void DrawAxis(int maxx,int maxy,int minx,int miny) int i; setcolor(GREEN); line(ScreenX(minx),ScreenY(0),ScreenX(maxx),ScreenY(0); lin

7、e(ScreenX(0),ScreenY(miny),ScreenX(0),ScreenY(maxy); for(i=minx;i=maxx;i+) if(i%10=0) line(ScreenX(i),ScreenY(-1),ScreenX(i),ScreenY(1); for(i=miny;i=maxy;i+) if(i%10=0) line(ScreenX(-1),ScreenY(i),ScreenX(1),ScreenY(i); void Draw() double x,y,y2; int MaxY,MinY; DrawRect(3,37,636,460); setviewport(4

8、,38,635,459,1); setfillstyle(1,7); bar(0,0,640,480); MaxY=211/ZOOM; MinY=-211/ZOOM; DrawAxis(MaxX,MaxY,MinX,MinY); setcolor(RED); setlinestyle(0,0,1); for(x=MinX;x=MaxX;x+=1.0/Q) y=Function(x); y2=Function(x+1.0/Q); line(ScreenX(x),ScreenY(y),ScreenX(x+1.0/Q),ScreenY(y2); int ScreenX(double x) retur

9、n (316+ZOOM*x+RX*ZOOM);int ScreenY(double y) return (211-ZOOM*y+RY*ZOOM);double Function(double x) return (A*sin(B*x)+C);void ZoomIn() if(ZOOM*1.5=1.5) ZOOM/=1.5; Draw(); Inform(ZoomOut);void MoveUp() if(RY-1=-15) RY-=1; Draw(); Inform(MoveUp);void MoveDown() if(RY+1=-15) RX-=1; Draw(); Inform(MoveL

10、eft);void MoveRight() if(RX+1=-15) RY-=1; Draw(); Inform(MoveUp);void MoveDown() if(RY+1=-15) RX-=1; Draw(); Inform(MoveLeft);void MoveRight() if(RX+1=15) RX+=1; Draw(); Inform(MoveRight);/*/* 图形缩放*/void ZoomIn() if(ZOOM*1.5=1.5) ZOOM/=1.5; Draw(); Inform(ZoomOut);/* 目录的选择功能实现*/switch(getch()case 0:

11、 ;break;case 1: ;break;case 2: ;判断所输入的数据是否符合要求:void SetA() do printf(nPlease Input A(-1010):); scanf(%f,&A); if (A*A100) printf(Input Wrong(-1010)! Try Again.n); while(A*A100);void SetB() do printf(nPlease Input B(-1010):); scanf(%f,&B); if (B*B100) printf(Input Wrong(-1010)! Try Again.n); while(B*B

12、100);void SetC() do printf(nPlease Input C(-1010):); scanf(%f,&C); if (C*C100) printf(Input Wrong(-1010)! Try Again.n); while(C*C100);/*/* 区间设置*/void SetMaxX() do printf(nPlease Input Max X(-100100):); scanf(%f,&MaxX); if (MaxX*MaxX10000|MaxXMinX! Try Again.n); while(MaxX*MaxX10000|MaxX10000|MaxX=Mi

13、nX) printf(Input Wrong.(-100100),And MinX10000|MaxX=MinX);四、个人总结通过这次C语言的课设实践活动,使我充分的体会到自己的不足。这让我在实践中对C语言又有了一个全新的认识。这让我在了解到自己的不足的同时,使自己对C语言的掌握又加深了一步。尤其是在这次实践活动中,我的课题:绘制函数SinX的过程中了解了更多的知识,对于C语言的绘图有了一定的掌握。使得自己可以运用程序画出简单的函数图象。在对C语言绘制图形的过程中,让自己了解到不少东西,如数学坐标转换成屏幕坐标,菜单栏及欢迎屏幕的制作,图形的缩放及移动,图形的颜色和立体感上也有了一定的了解,

14、并可以进行一些简单的操作等五、参考文献1 谭浩强C程序设计北京:清华大学出版社,2005六、源程序/* 编译预处理*/#include #include #include #include #include #include #define ESC 0x1b#define MENU struct menu/*#*/* 菜单结构体*/struct menu char Name16; int Value; void (*Function)();/*#*/* 全局变量*/int RX=0,RY=0;double ZOOM=10;int Q=10;float A=1,B=1,C=0;float Max

15、X=32,MinX=-32;/* 菜单*/MENU Menus3;MENU Menus26;/*#*/* 函数声明*/void m();void Initialize();void Start();void Draw();void DrawMenuBar();void ZoomIn();void ZoomOut();void Pause();void Title(char * str);void Inform(char * str);void DrawMenu(MENU * m,int,int,int,int);void DrawRect(int,int,int,int);void DrawA

16、xis(int,int,int,int);void MoveUp();void MoveDown();void MoveLeft();void SetMinX();void SetMaxX();void SetA();void SetB();void SetC();void Setting();int MenuInput(MENU * M,int);void ShowMenu(MENU * M,int);void Quit();void MoveRight();void Configure();void StartUp();int ScreenX(double);int ScreenY(dou

17、ble);double Function(double);/*#*/* 程序开始*/*/main()/* 主函数*/ /*菜单资源初始化*/ strcpy(Menus0.Name,Start Now) ;Menus0.Value=0 ;Menus0.Function=&StartUp; strcpy(Menus1.Name,Settings) ;Menus1.Value=1 ;Menus1.Function=&Setting; strcpy(Menus2.Name,Quit) ;Menus2.Value=2 ;Menus2.Function=NULL; strcpy(Menus20.Name,

18、Set A) ;Menus20.Value=0 ;Menus20.Function=&SetA; strcpy(Menus21.Name,Set B) ;Menus21.Value=1 ;Menus21.Function=&SetB; strcpy(Menus22.Name,Set C) ;Menus22.Value=2 ;Menus22.Function=&SetC; strcpy(Menus23.Name,Set MinX) ;Menus23.Value=3 ;Menus23.Function=&SetMinX; strcpy(Menus24.Name,Set MaxX) ;Menus24

19、.Value=4 ;Menus24.Function=&SetMaxX; strcpy(Menus25.Name,Back) ;Menus25.Value=5 ;Menus25.Function=NULL;Configure();/* 进入程序*/*/void StartUp()/* 图形环境启动*/ Initialize(); Start(); Draw(); Pause();/*/void Initialize()/* 图形设备初始化*/ int GD=VGA; int GM=VGAHI; int ErrorC; clrscr(); initgraph(&GD,&GM,); ErrorC=

20、graphresult(); if (ErrorC!=0) printf(Graphics System ERROR); exit(1); cleardevice();/*/void Configure()/* 字符环境主菜单*/ do clrscr(); printf(#n); printf(# #n); printf(# Welcome #n); printf(# #n); printf(#n); ShowMenu(Menus,3); while(MenuInput(Menus,3)!=1); Quit();/*/int MenuInput(MENU *ms,int n)/*菜单输入*/

21、int i,a=0; char c; do c=getch(); for(i=0;in;i+) if(c=(0+msi.Value) if (msi.Function=NULL) a=1;break;break; else msi.Function(); break;break; while(i=n); return a;/*/void ShowMenu(MENU *ms,int n)/* 显示菜单*/ int i; for(i=0;in;i+) printf( %d-%s n,msi.Value,msi.Name); printf(Select:);/*/void Start()/* 欢迎屏

22、幕及视图初始化*/ setcolor(RED); settextstyle(TRIPLEX_FONT,0,9); outtextxy(120,180,Welcome); setcolor(YELLOW); settextstyle(0,0,1); outtextxy(6,470,Press Any Key.); getch(); cleardevice(); setfillstyle(SOLID_FILL,7); setlinestyle(0,0,1); bar(0,0,639,479); setfillstyle(SOLID_FILL,BLUE); bar(1,1,638,12); Titl

23、e(Function Graphics V0.1); DrawRect(3,465,636,476); DrawMenuBar(); Inform(Ready!); /*/int ScreenX(double x)/*数学座标转换为屏幕坐标*/ return (316+ZOOM*x+RX*ZOOM);int ScreenY(double y) return (211-ZOOM*y+RY*ZOOM);/*/void Setting()/* 字符界面参数设置菜单*/ do clrscr(); printf(#n); printf(# #n); printf(# Settings #n); prin

24、tf(# y=Asin(B*x)+C #n); printf(# #n); printf(#n); ShowMenu(Menus2,6); while(MenuInput(Menus2,6)!=1);/*/void Draw()/* 绘制函数图像*/ double x,y,y2; int MaxY,MinY; DrawRect(3,37,636,460); setviewport(4,38,635,459,1); setfillstyle(1,7); bar(0,0,640,480); /*MaxX=316/ZOOM;*/ MaxY=211/ZOOM; /*MinX=-316/ZOOM;*/

25、MinY=-211/ZOOM; DrawAxis(MaxX,MaxY,MinX,MinY); setcolor(RED); setlinestyle(0,0,1); for(x=MinX;x=MaxX;x+=1.0/Q) y=Function(x); y2=Function(x+1.0/Q); line(ScreenX(x),ScreenY(y),ScreenX(x+1.0/Q),ScreenY(y2); /*/void DrawMenuBar()/* 绘制菜单条*/ setlinestyle(0,0,1); setcolor(DARKGRAY); line(1,13,638,13); lin

26、e(1,27,638,27); setcolor(WHITE); line(1,14,638,14); line(1,28,638,28); setcolor(BLACK); settextstyle(DEFAULT_FONT,0,1);/*/* 绘制坐标轴*/void DrawAxis(int maxx,int maxy,int minx,int miny) int i; setcolor(GREEN); line(ScreenX(minx),ScreenY(0),ScreenX(maxx),ScreenY(0); line(ScreenX(0),ScreenY(miny),ScreenX(

27、0),ScreenY(maxy); for(i=minx;i=maxx;i+) if(i%10=0) line(ScreenX(i),ScreenY(-1),ScreenX(i),ScreenY(1); for(i=miny;i=-15) RY-=1; Draw(); Inform(MoveUp);void MoveDown() if(RY+1=-15) RX-=1; Draw(); Inform(MoveLeft);void MoveRight() if(RX+1=15) RX+=1; Draw(); Inform(MoveRight);/*/* 图形缩放*/void ZoomIn() if(ZOOM*1.5=1.5) ZOOM/

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号