正弦函数的图形表示Word下载.docx
- 文档编号:16229175
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:28
- 大小:177.71KB
正弦函数的图形表示Word下载.docx
《正弦函数的图形表示Word下载.docx》由会员分享,可在线阅读,更多相关《正弦函数的图形表示Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
六、教师评语:
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为三大模块,其中他们的功能分别是:
绘制图象(StratUp)、函数参数的设定(Settings)、退出(Quit)。
在这些函数当中,绘制图象(StratUp)又包括菜单栏的绘制,函数图形及坐标轴的绘制和函数的缩放与移动;
函数参数的设定(Settings)包括函数Y=ASin(Bx)+C的参数A、B、C及X的区间MinX~MaxX.
二、程序流程图
整体框架图
Y=ASin(Bx)+C
绘制函数图象及功能模块图
(1)菜单界面
(2)函数参数设置
(3)函数区间设置
(4)欢迎屏幕
(5)函数图象
(6)函数的缩放
(7)函数的上下移动
(8)函数的左右移动
三、核心技术的实现说明及相应程序段
voidStartUp()/*图形环境启动*/
{
Initialize();
Start();
Draw();
Pause();
}
/****************************************/
voidInitialize()/*图形设备初始化*/
intGD=VGA;
intGM=VGAHI;
intErrorC;
clrscr();
initgraph(&
GD,&
GM,"
"
);
ErrorC=graphresult();
if(ErrorC!
=0)
{
printf("
GraphicsSystemERROR"
exit
(1);
}
cleardevice();
voidStart()/*欢迎屏幕及视图初始化*/
setcolor(RED);
settextstyle(TRIPLEX_FONT,0,9);
outtextxy(120,180,"
Welcome"
setcolor(YELLOW);
settextstyle(0,0,1);
outtextxy(6,470,"
PressAnyKey..."
getch();
setfillstyle(SOLID_FILL,7);
setlinestyle(0,0,1);
bar(0,0,639,479);
setfillstyle(SOLID_FILL,BLUE);
bar(1,1,638,12);
Title("
FunctionGraphicsV0.1"
DrawRect(3,465,636,476);
DrawMenuBar();
Inform("
Ready!
intScreenX(doublex)/*数学座标转换为屏幕坐标*/
/*对于屏幕坐标而言,它的X轴坐标与数学坐标的正方向相同,而Y轴的坐标相反*/
return(316+ZOOM*x+RX*ZOOM);
intScreenY(doubley)
return(211-ZOOM*y+RY*ZOOM);
voidMoveUp()
if(RY-1>
=-15)RY-=1;
MoveUp"
voidMoveDown()
{if(RY+1<
=15)RY+=1;
MoveDown"
voidMoveLeft()
if(RX-1>
=-15)RX-=1;
MoveLeft"
voidMoveRight()
if(RX+1<
=15)RX+=1;
MoveRight"
/*图形缩放*/
voidZoomIn()
if(ZOOM*1.5<
=80)ZOOM*=1.5;
ZoomIn"
voidZoomOut()
if(ZOOM/1.5>
=1.5)ZOOM/=1.5;
ZoomOut"
/*目录的选择功能实现*/
switch(getch())
case‘0’:
;
break;
case‘1’:
case‘2’:
判断所输入的数据是否符合要求:
voidSetA()
do
\nPleaseInputA(-10~10):
scanf("
%f"
&
A);
if(A*A>
100)printf("
InputWrong(-10~10)!
TryAgain.\n"
}while(A*A>
100);
voidSetB()
\nPleaseInputB(-10~10):
B);
if(B*B>
}while(B*B>
voidSetC()
\nPleaseInputC(-10~10):
C);
if(C*C>
}while(C*C>
/*区间设置*/
voidSetMaxX()
\nPleaseInputMaxX(-100~100):
MaxX);
if(MaxX*MaxX>
10000||MaxX<
=MinX)printf("
InputWrong.(-100~100),AndMaxX>
MinX!
}while(MaxX*MaxX>
=MinX);
voidSetMinX()
\nPleaseInputMinX(-100~100):
MinX);
if(MinX*MinX>
InputWrong.(-100~100),AndMinX<
MaxX!
}while(MinX*MinX>
四、个人总结
通过这次C语言的课设实践活动,使我充分的体会到自己的不足。
这让我在实践中对C语言又有了一个全新的认识。
这让我在了解到自己的不足的同时,使自己对C语言的掌握又加深了一步。
尤其是在这次实践活动中,我的课题:
绘制函数SinX的过程中了解了更多的知识,对于C语言的绘图有了一定的掌握。
使得自己可以运用程序画出简单的函数图象。
在对C语言绘制图形的过程中,让自己了解到不少东西,如数学坐标转换成屏幕坐标,菜单栏及欢迎屏幕的制作,图形的缩放及移动,图形的颜色和立体感上也有了一定的了解,并可以进行一些简单的操作等
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
六、源程序
/*编译预处理*/
#include<
graphics.h>
stdio.h>
stdlib.h>
math.h>
dos.h>
string.h>
#defineESC0x1b
#defineMENUstructmenu
/*#############################################*/
/*菜单结构体*/
structmenu
charName[16];
intValue;
void(*Function)();
};
/*全局变量*/
intRX=0,RY=0;
doubleZOOM=10;
intQ=10;
floatA=1,B=1,C=0;
floatMaxX=32,MinX=-32;
/*菜单*/
MENUMenus[3];
MENUMenus2[6];
/*函数声明*/
voidm();
voidInitialize();
voidStart();
voidDraw();
voidDrawMenuBar();
voidZoomIn();
voidZoomOut();
voidPause();
voidTitle(char*str);
voidInform(char*str);
voidDrawMenu(MENU*m,int,int,int,int);
voidDrawRect(int,int,int,int);
voidDrawAxis(int,int,int,int);
voidMoveUp();
voidMoveDown();
voidMoveLeft();
voidSetMinX();
voidSetMaxX();
voidSetA();
voidSetB();
voidSetC();
voidSetting();
intMenuInput(MENU*M,int);
voidShowMenu(MENU*M,int);
voidQuit();
voidMoveRight();
voidConfigure();
voidStartUp();
intScreenX(double);
intScreenY(double);
doubleFunction(double);
/*######################################*/
/*程序开始*/
main()/*主函数*/
{/*菜单资源初始化*/
strcpy(Menus[0].Name,"
StartNow"
);
Menus[0].Value=0;
Menus[0].Function=&
StartUp;
strcpy(Menus[1].Name,"
Settings"
Menus[1].Value=1;
Menus[1].Function=&
Setting;
strcpy(Menus[2].Name,"
Quit"
Menus[2].Value=2;
Menus[2].Function=NULL;
strcpy(Menus2[0].Name,"
SetA"
Menus2[0].Value=0;
Menus2[0].Function=&
SetA;
strcpy(Menus2[1].Name,"
SetB"
Menus2[1].Value=1;
Menus2[1].Function=&
SetB;
strcpy(Menus2[2].Name,"
SetC"
Menus2[2].Value=2;
Menus2[2].Function=&
SetC;
strcpy(Menus2[3].Name,"
SetMinX"
Menus2[3].Value=3;
Menus2[3].Function=&
SetMinX;
strcpy(Menus2[4].Name,"
SetMaxX"
Menus2[4].Value=4;
Menus2[4].Function=&
SetMaxX;
strcpy(Menus2[5].Name,"
Back"
Menus2[5].Value=5;
Menus2[5].Function=NULL;
Configure();
/*进入程序*/
voidConfigure()/*字符环境主菜单*/
#######################################\n"
##\n"
#Welcome#\n"
ShowMenu(Menus,3);
}while(MenuInput(Menus,3)!
=1);
Quit();
intMenuInput(MENU*ms,intn)/*菜单输入*/
inti,a=0;
charc;
c=getch();
for(i=0;
i<
n;
i++)
if(c==('
0'
+ms[i].Value))
if(ms[i].Function==NULL){a=1;
break;
else{ms[i].Function();
break;
}while(i==n);
returna;
voidShowMenu(MENU*ms,intn)/*显示菜单*/
inti;
[%d]--%s\n"
ms[i].Value,ms[i].Name);
Select:
voidSetting()/*字符界面参数设置菜单*/
#Settings#\n"
#y=Asin(B*x)+C#\n"
ShowMenu(Menus2,6);
}while(MenuInput(Menus2,6)!
voidDraw()/*绘制函数图像*/
doublex,y,y2;
intMaxY,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;
MinY=-211/ZOOM;
DrawAxis(MaxX,MaxY,MinX,MinY);
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));
voidDrawMenuBar()/*绘制菜单条*/
setcolor(DARKGRAY);
line(1,13,638,13);
line(1,27,638,27);
setcolor(WHITE);
line(1,14,638,14);
line(1,28,638,28);
setcolor(BLACK);
settextstyle(DEFAULT_FONT,0,1);
/*绘制坐标轴*/
voidDrawAxis(intmaxx,intmaxy,intminx,intminy)
setcolor(GREEN);
line(ScreenX(minx),ScreenY(0),ScreenX(maxx),ScreenY(0));
line(ScreenX(0),ScreenY(miny),ScreenX(0),ScreenY(maxy));
for(i=minx;
=maxx;
if(i%10==0)
line(ScreenX(i),ScreenY(-1),ScreenX(i),ScreenY
(1));
for(i=miny;
=maxy;
line(ScreenX(-1),ScreenY(i),ScreenX
(1),ScreenY(i));
voidInform(char*str)/*状态栏输出*/
setviewport(4,466,635,475,1);
bar(0,0,640,100);
setcolor(BLUE);
outtextxy(2,1,str);
setviewport(0,0,639,479,1);
voidPause()/*程序暂停等待用户输入*/
intExitFlag=0;
switch(getch()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正弦 函数 图形 表示