简单图形处理 高质量C语言程序
1.课程设计总体要求
2.设计任务与分析
3.设计方案
4.程序调试
5.总结与心得
6.参考文献
1.课程设计总体要求
采用模块儿化程序设计;
鼓励可视化编程;
源程序中有足够的注释;
学生可自行增加新功能模块儿;
必须上机调试通过;
注重算法运用,优化存储效率与运算效率;
需提交源程序及相关文件;
2.设计任务与分析
a)设计题目
简单图形处理
b)主要内容
只考虑点、直线、圆三种基本图形。对于点,给出点的横纵坐标;对于直线,给出直线方程ax+by+c=0的三个系数a,b,c;对于圆,给出圆心坐标和半径。试说明图形的几何形状类型,并编写输入和输出图形数据、求两点矩离、求两直线交点、已知点和半径形成圆、已知两点形成直线等函数。
c)任务分析
这个系统主要需要实现对求两点矩离、求两直线交点、已知点和半径形成圆、已知两点形成直线。我们可以先构建一个主函数,然后一次插入不同的功能函数。在实现功能函数的过程中又通过菜单函数进行各功能函数的调用。在运用图形处理函数的时候要用到图形文件。
3.设计方案
a)模块
(1)输入两点,求出之间的距离。
(2)输入圆心和半径输出一般的圆。
(3)输入两直线表达式X,Y的系数,求出两直线的交点。
(4)输入两点,输出通过该两点的直线。
(5)退出。
b)流程图
c)主要函数
1.pointjl() (求两点之间的距离)
2.linejd();(求两直线的交点)
3.yuan();(已知圆心和半径形成圆)
4.line1();(已知两点形成直线)
5.choice();(功能选择)
d)负责的模块设计
在这个程序中我做了以下模块
(1)输入两点,求出之间的距离。
(2)输入圆心和半径输出一般的圆。
(3)菜单模块
#include
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "conio.h"
void pointjl() /*求两点之间的距离*/
{
int x1,y1,x2,y2;
float jl;
printf("*********************************************************\n" );
printf("请输入两点,x1,y1,x2,y2:\n");
printf("*********************************************************\n" );
scanf("%d,%d,%d,%d",&x1,&y1,&x2,&y2);
jl=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
printf("这是两点x1=%d , y1=%d 和x2=%d , y2=%d 之间的距离是\n jl=%f\n",x1,y1,x2,y2,jl);
getchar();
}
void yuan() /*输出输入了已知数据的圆*/
{
int x1,y1,r;
int gdriver, gmode, i;
printf("*********************************************************\n" );
printf("请输入圆心x1,y1 圆的半径r:\n");
printf("*********************************************************\n" );
scanf("%d,%d,%d",&x1,&y1,&r);
gdriver=DETECT;
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(GREEN);
circle(x1+320, y1+240, r);
setlinestyle(0, 0, 3);
setcolor(2);
setcolor(WHITE);
setlinestyle(4, 0xaaaa, 1);
getch();
closegraph();
}
void menu() /*菜单函数*/
{
printf("*********************************************************\n" );
printf("欢迎进入简单的图形处理系统!\n");
printf("*********************************************************\n" );
printf("*********************************************************\n" );
printf("请输入1,2,3,4:\n");/*请输入数字1,2,3,4*/
printf("1.两点之间的距离\n");/*两点之间的距离*/
printf("2.两直线的交点\n");/*两直线的交点*/
printf("3.已知点和半径形成圆\n");/*已知点和半径形成圆*/
printf("4.已知两点形成直线\n");/*已知两点形成直线*/
printf("*********************************************************\n" );
}
4.程序调试
程序刚进入时画面
进入到程序系统菜单时
输入数字1进入求两点之间的距离(1,2)和(3,4)
输入数字3进入输出圆的程序
输出的图形
5.总结与心得
在本次的课程设计当中,我受益匪浅,就简单的图形的输入输出系统这个课题,我实现了图形的输入和输出,能够直接通过写的程序进行简单操作。在做程序的过程遇到了很多问题,但是在组员和其他同学帮助下都一一解决了。
6.参考文献
[1] 谭浩强. C语言程序设计[M].北京:清华大学出版社.2006
[2] 张高煜. C语言程序设计实训.北京:中国水利出版社.2001
[3] 王晓东. C语言设计简明教程.北京:中国水利出版社.2006
附:源代码:
#include
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "conio.h"
void linejd()/*求两直线交点*/
{
float a1,a2,b1,b2,c1,c2,x,y;/*请输入直线的系数*/
printf("*********************************************************** **************************************************\n");
printf("请输入直线 1 a1x+b1y+c1=0 的系数a1,b1,c1 和直线 2 a2x+b2y+c2=0 的系数a2,b2,c1:\n");
printf("*************************************************************** **********************************************\n");
scanf("%f,%f,%f,%f,%f,%f",&a1,&b1,&c1,&a2,&b2,&c2);
x=(c2/b2-c1/b1)/(a1/b1-a2/b2);
y=(c2/a2-c1/a1)/(b1/a1-b2/a2);
printf("两直线交点是x=%f,y=%f.\n",x,y);
getchar();
}
void pointjl() /*求两点之间的距离*/
{
int x1,y1,x2,y2;
float jl;
printf("*********************************************************\n" );
printf("请输入两点,x1,y1,x2,y2:\n");
printf("*********************************************************\n" );
scanf("%d,%d,%d,%d",&x1,&y1,&x2,&y2);
jl=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
printf("这是两点x1=%d , y1=%d 和x2=%d , y2=%d 之间的距离是\n jl=%f\n",x1,y1,x2,y2,jl);
getchar();
}
void line1() /*输出输入已知数据的直线*/
{
int x1,y1,x2,y2;
int gdriver, gmode, i;
printf("*********************************************************\n" );
printf("请输入两点,x1,y1,x2,y2:\n");
printf("*********************************************************\n" );
scanf("%d,%d,%d,%d",&x1,&y1,&x2,&y2);
gdriver=DETECT;
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);/*设定背景颜色为蓝色*/
cleardevice();
setcolor(GREEN);
setlinestyle(0, 0, 3);
setcolor(2);
setcolor(WHITE);
setlinestyle(4, 0xaaaa, 1);
line(x1, y1, x2, y2);
getch();
closegraph();
}
void yuan() /*输出输入了已知数据的圆*/
{
int x1,y1,r;
int gdriver, gmode, i;
printf("*********************************************************\n" );
printf("请输入圆心x1,y1 圆的半径r:\n");
printf("*********************************************************\n" );
scanf("%d,%d,%d",&x1,&y1,&r);
gdriver=DETECT;
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(GREEN);
circle(x1+320, y1+240, r);
setlinestyle(0, 0, 3);
setcolor(2);
setcolor(WHITE);
setlinestyle(4, 0xaaaa, 1);
getch();
closegraph();
}
void menu() /*菜单函数*/
{
printf("*********************************************************\n" );
printf("欢迎进入简单的图形处理系统!\n");
printf("*********************************************************\n" );
printf("*********************************************************\n" );
printf("请输入1,2,3,4:\n");/*请输入数字1,2,3,4*/
printf("1.两点之间的距离\n");/*两点之间的距离*/
printf("2.两直线的交点\n");/*两直线的交点*/
printf("3.已知点和半径形成圆\n");/*已知点和半径形成圆*/
printf("4.已知两点形成直线\n");/*已知两点形成直线*/
printf("*********************************************************\n" );
}
int choice ()/*选择函数的定义*/
{
char c;
int k=1;
menu();
c=getchar();
while(k)
switch(c)
{
case '1':pointjl() ;k=0;break;
case '2':linejd() ;k=0;break; /*求已知两直线之间的交点函数*/
case '3':yuan();k=0;break;
case '4':line1();k=0;break;
case '0':k=0;break;
}
printf("*********************************************************\n" );
printf("欢迎使用该系统\n");
printf("*********************************************************\n" );
return 1;
}
int main()
{
int gdriver, gmode, i;/*在进入主菜单之前先形成一个已知图形*/ gdriver=DETECT;
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(GREEN);
circle(320, 240, 98);
setlinestyle(0, 0, 3);
setcolor(2);
rectangle(220, 140, 420, 340);
setcolor(WHITE);
setlinestyle(4, 0xaaaa, 1);
line(220, 240, 420, 240);
line(320, 140, 320, 340);
getch();
closegraph();
choice();
getchar();
return 1;
}