华科控制C语言课程设计交通模拟导航系统

上传人:阳*** 文档编号:152172847 上传时间:2022-09-14 格式:DOCX 页数:100 大小:62.15KB
返回 下载 相关 举报
华科控制C语言课程设计交通模拟导航系统_第1页
第1页 / 共100页
华科控制C语言课程设计交通模拟导航系统_第2页
第2页 / 共100页
华科控制C语言课程设计交通模拟导航系统_第3页
第3页 / 共100页
点击查看更多>>
资源描述
C语言课程设计报告 题目:交通模拟导航系统指导老师:周纯洁 周凯波 何顶新 彭刚 院 系: 控 制年级: 11 级小组成员: 翔羽 目 录引言31.1背景31.2参考资料3需求分析32.1需求分析32.2运行环境3系统设计33.1模块划分33.2功能简介33.3时间安排33.4程序简要流程图33.5核心算法3源代码3100 / 100引言1.1背景车载GPS导航仪:随着汽车的普及和道路的建设,城际间的经济往来更加频繁,活动的区域也越来越大;为了提高生活质量,大量的休闲活动、探险活动的举行使我们并不局限在自己认识的一小块区域中,不认识道路,找不到目的地的情况也屡有发生,就此,车载GPS导航仪将会以合适的价位走入车主的世界,成为车上的基本装备。车载GPS导航仪解决方案,其实是最灵活和最复杂的,车载GPS导航仪有很多种解决方案可以满足车载的需要。GPS汽车导航是将GPS和地理信息系统、现代通讯技术综合在一起,研制成的一种新型汽车导航定位设备,具备监控、调度、报警、遥控熄火和遥控断油、自动存档、系统自检等功能。它可将汽车的任何动态位置随时准确无误地显示在仪器的电子地图上。导航仪的电子地图自动跟踪显示汽车当前位置及周边情况,驾驶员可随时在导航仪上查询周边一定半径地区内的地理信息。交通模拟导航系统能够简单地模拟GPS汽车导航系统。在建立一个简单的小型化城市地图的基础上,能对该城市内指定的车辆提供导航。 1.2参考资料1. 王士元. C高级实用程序设计. 北京: 清华大学出版社. 19962. 周纯杰,刘正林等. 标准C语言程序及应用. 武汉: 华中科技大学出版社. 20053. 姚远. 高级C语言程序设计技巧与实例. 北京: 机械工业出版社, 19954. 陈清华, 朱红. C语言课程设计. 南京: 东南大学出版社, 20035. 潭浩强. C语言程序设计. 北京: 清华大学出版社, 20006. 刘振安 ,苏仕华 . C语言图形设计 北京:人民邮电出版社,19957. 潘建华 ,卫跃文. C语言实用软件界面设计 西安:西安电子科大出版社,19958. 鸿健编译. c语言高级程序员编程指南 北京:北京希望电脑公司公司,1991 好友指导: 彭军才 程攀 需求分析2.1需求分析由于GPS技术所具有的全天候、高精度和自动测量的特点,作为先进的测量手段和新的生产力,已经融入了国民经济建设、国防建设和社会发展的各个应用领域。随着冷战结束和全球经济的蓬勃发展,美国政府宣布2000年至2006年期间,在保证美国国家安全不受威胁的前提下,取消SA政策,GPS民用信号精度在全球范围内得到改善,利用C/A码进行单点定位的精度由100米提高到20米,这将进一步推动GPS技术的应用,提高生产力、作业效率、科学水平以及人们的生活质量,刺激GPS市场的增长。据有关专家预测,在美国,单单是汽车GPS导航系统,2000年后的市场将达到30亿美元,而在我国,汽车导航的市场也将达到50亿元人民币。可见,GPS技术市场的应用前景非常可观。我们用TC3.0编写的C语言程序来模拟导航栏仪的各种操作过程。GPS导航仪的常用功能大致有:1.地图查询 可以在操作终端上搜索你要去的目的地位置。 可以记录你常要去的地方的位置信息,并保留下来。2.路线规划 GPS导航系统会根据你设定的起始点和目的地,自动规划一条线路。 规划线路可以设定是否要经过某些途径点。3.自动导航 语音导航:用提前向驾驶者提供路口转向,导航系统状况等行车信息,就像一个懂路的向导告诉你如何驾车去目的地一样。导航中最重要的一个功能,使你无需观看操作终端,通过语音提示就可以安全到达目的地。 画面导航:在操作终端上,会显示地图,以及车子现在的位置,行车速度,目的地的距离,规划的路线提示,路口转向提示的行车信息。 因为在DOS环境下编程模拟,所以只模拟了部分功能,如下:1. 交通模拟导航系统提供在华科校园内导航的功能;2. 进入系统后,可选择进行帮助、退出或导航;3. 选择退出,则直接退出程序。4. 选择导航,则进入导航界面:选择路径(车辆的起始点自动读取上一次所到达的目的地,选择终点,可以选择必经地),选完路线后系统将会在地图上用粗线标出路线图,选择导航开始,进入模拟导航模式,用键盘控制小车的运动。过程中现实路程和时间;5. 周边查询:选择位置,就可以显示出附近的建筑;6. 帮助,则进入帮助界面,帮助如何使用导航系统;7. 直接退出;8. 系统会提前对即将经过的红绿灯进行提醒(以上为初期设计思路)2.2运行环境 交通模拟导航系统是对GPS汽车导航系统的模拟,系统的开发基于C语言, 其设计环境要求,是在DOS环境下用C语言编程实现,使用TC或BC开发软件,因此,交通模拟导航系统能够在绝大多数计算机系统上运行,包括常见的windows XP操作系统及windows 7 32位机上运行,但是由于BC在64位的windows 7下无法运行,且BC或TC在windows 7下不能较好地解决全屏问题,因而,推荐在windows XP的环境下测试运行此交通模拟导航系统。系统设计3.1模块划分1. 图形界面模块:主要包括动画,主界面,菜单和地图,标出导航路线。2. 鼠标模块:包括鼠标的图形,鼠标状态。3. 汉字模块:汉字输出。4. 控制模块:控制小车运动,分为自动和手动。5. 算法模块:计算最优路径,地杰斯特拉算法。6. 文件模块:保存小车的位置路径等信息。7. 菜单模块:显示菜单8. 主界面功能实现模块3.2功能简介1. 开场动画,显示“交通模拟导航系统 欢迎使用”,附带开场动画;2. 按任意键,进入主界面,菜单栏显示“所在地”,“终点选择”,“导航开始”,“查询”,“帮助”,“退出”选项;3. 点击帮助,进入文字说明界面,双击鼠标,回到主界面;4. 点击退出,则退出程序;5. 点击“查询”,列出可选地点,选择地点后则显示选择地点的信息;6. 点击“终点选择”,选择终点,确定终点选择;7. 点击导航开始,可以选择手动或者自动模式,确定模式则进入导航界面8. 进入导航界面,手动控制小车速度、方向、暂停和退出,左边菜单显示时间、速度、距离、下一站和转向等信息9. 如果是自动模式,则小车自动沿着最优路线达到终点10. 达目的地,选择继续或者退出导航。11. 回到这界面可以再次选择终点重新导航。3.3时间安排任务备注第2周系统需求分析与设计报告完成第3,4周界面模块,汉字模块完成第5,6周算法模块完成第7周鼠标模块,文件模块完成第8周编码实现、调试完成第9周调试、验收、完成报告完成3.4程序简要流程图 进入开场动画 主界面 显示所在地 选择终点导航开始 查询 帮助退出 选择终点列表 单击选择终点 回到主界面 是否满足条件 选择导航模式回 主界 面查询列表选择查询地点显示地点信息 回到主界面显示帮助信息回主界 面自动 手动 键盘控制小车自动运动 到达目的地 回到主界面 N Y3.5核心算法/迪格拉斯算法void shortest_path(int beginPointNum,int finishPointNum,double distanceNN,int n,int path16)POINTSTATE stateN;/定义点的状态int i,k;double min;/最短距离for(i=0;in;i+)/初始化所有点的状态statei.pre=-1;/前驱都先为-1statei.len=INFINITY;statei.label=0;/0表示没有确定,1表示已经求出最短路径statebeginPointNum.len=0;statebeginPointNum.label=1;k=beginPointNum;dofor(i=0;in;i+)/全部点测试if(distanceki!=0&statei.label=0) /选出不是点k本身,且还没有确定距离的点iif(statek.len+distancekistatei.len)/如果点i和点k相邻statei.len=statek.len+distanceki;/点i的len为点k的len加点i和点k的距离statei.pre=k;/点i的前驱为点kk=-1;min=INFINITY;for(i=0;in;i+)/全部检测if(statei.label=0&statei.len=0);pathi=-1;/为了后面方便判断,最后存储-1; 源代码/*head.h*/#include #include #include #include #include #include #include #include #include #include #include #include #define key_LEFT 0x4b00#define key_RIGHT 0x4d00#define key_DOWN 0x5000#define key_UP 0x4800#define key_ESC 0x011b#define key_ENTER 0x1c0d#define key_A 0x1e61#define key_S 0x1f73#define key_D 0x2064#define key_W 0x1177#define key_SPACE 0x3920#define PI 3.1415#define N 32#define INFINITY 3000#define SPEED1/pcx图片显示的定义#define SCREEN_HEIGHT 200#define SCREEN_WIDTH 320#define PALETTE_MASK 0x3c6#define PALETTE_REGISTER_RD 0x3c7#define PALETTE_REGISTER_WR 0x3c8#define PALETTE_DATA 0x3c9#define VGA256 0x13#define TEXT_MODE 0x03typedef struct RGB_color_typunsigned char red;unsigned char green;unsigned char blue;RGB_color,*RGB_color_ptr;/定义画地图的结构体typedef struct POINT double x;double y;int num;char *notes;POINT;typedef struct BUILDING double x; double y; int dx; int num; char *name; char *notes; BUILDING;typedef struct CARdouble speed;double angle; /小车转过的角度CAR;typedef struct ROAD double x1; double y1; double x2; double y2; ROAD;typedef struct TREE /定义画树的结构体 double x;double y; double dx; double dist; int num; char fangxiang;TREE;typedef struct HOUSEdouble x;double y;int dx;int color;HOUSE;typedef struct POINTSTATEint pre;int len;int label;POINTSTATE;/chinesevoid out_hz(int x, int y,char *s,int flag,int part,int color);/mousevoid cursor(int x, int y);int initmouse(int xmi, int xma, int ymi, int yma);int readmouse(int *mx, int *my,int *mbutt);void newmouse(int *mx, int*my, int*mbutt);/menuvoid menu_main();void menu_up();void menu_up_1();void auto_menu_left(double myCarSpeed,double *dist,int path16,POINT allPoint32,int *path_i,int *flagPath,int *flagOk);void menu_left(double myCarSpeed,double *dist,int path16,POINT allPoint32,int *path_i,int *flagPath,int *flagOk);void help_page();void zhong_dian(int *pFinishBuilding);void zhong_dian_show();void cha_xun();void cha_xun_show();void cha_xun_information(int i );void if_start(int *flagStart,int *pFinishBuilding);void mode_select(int *pflagAuto);void shan_shuo(int color,int time,int num);/mapvoid init_allPoint(POINT allPoint32);void init_buildings(BUILDING buildings15);void draw_buildings_1(BUILDING *p,double xMapSpeed,double yMapSpeed);void draw_buildings_2(BUILDING *p,double xMapSpeed,double yMapSpeed);void draw_buildings_3(BUILDING *p,double xMapSpeed,double yMapSpeed);void init_road(ROAD allRoad17);void draw_road_shuzhi(ROAD *p,double xMapSpeed,double yMapSpeed);void draw_road_shiping(ROAD *p,double xMapSpeed,double yMapSpeed);void init_tree(TREE allTree13);void draw_tree_y(TREE *p,double xMapSpeed,double yMapSpeed);void draw_tree_x(TREE *p,double xMapSpeed,double yMapSpeed);void init_house(HOUSE houses30);void draw_house(HOUSE *p,double xMapSpeed,double yMapSpeed);void draw_car(CAR *cp);void zhuan_dong(double ang, int *body, int *win, int *head, int *rear, int *L_h_light,int *L_r_light, int *R_h_light,int *R_r_light,int x, int y);void draw_star(int x,int y,int color,int i);void map_2();void draw_map_1(double xMapSpeed,double yMapSpeed,BUILDING buildings15,ROAD allRoad17,TREE allTree13,HOUSE houses30);/gpsvoid GPS();void init_again(int *flagStart,int *finishBuildingNum,int *flagAuto);void gps_main(int *finishBuildingNum,int flagAtuo);void mouse_select(int *flagStart, int *pFinishBuilding,int *pflagAuto);void contral_car_map(CAR *cp,int *flagExit);void auto_contral_1(int *flagExit);void auto_contral_2(CAR *cp,int path16,POINT allPoint32,int *path_i,int *flagPath,BUILDING buildings15,ROAD allRoad17,TREE allTree13,HOUSE houses30);void if_zhongdian();void jisuan_dist(double distanceNN,int path16,double *dist);void if_exit(int *flagExit);void if_ok(int finishPointNum,POINT allPoint32,int *flagOk);void xy_change(POINT allPoint32,BUILDING buildings15,ROAD allRoad17,TREE allTree13,HOUSE houses30,double xMap,double yMap);void xy_change_house(HOUSE *p,double xMap,double yMap);void xy_change_point(POINT *p,double xMap,double yMap);void xy_change_buildings(BUILDING *b,double xMap,double yMap);void xy_change_road_shuzhi(ROAD *p,double xMap,double yMap);void xy_change_road_shiping(ROAD *p,double xMap,double yMap);void xy_change_tree(TREE *t,double xMap,double yMap);void point_change_save(POINT allPoint32,double xMapSpeed,double yMapSpeed);/init_start_endvoid init_350();void init_480();void start_page();void start_cartoon();void end_page();void Set_Palette_Register(int index,RGB_color_ptr color);void PCX_Load_Screen(char * enable_palette);void Set_Video_Mode(int mode);void pcx(char *pcx);void pcx_1(char *pcx);void picture_show_1(int x,int y,int mousekey);void picture_show_2(int i);void show_time();/recordvoid save_finish_building(int finish_building);void get_begin_building(int *p_begin_building);void show_record();/dijkstravoid init_point_distance(double distanceNN,POINT allPoint32);void init_distance_1(double distanceNN);void init_distance_2(POINT point_1,POINT point_2,double distanceNN);void shortest_path(int beginPointNum,int finishPointNum,double distanceNN,int n,int path16);void draw_shortest_path(int path16,POINT allPoint32);void draw_path(int i,int j,POINT allPoint32);/*main.cpp*/#include Head.hvoid main()init_480();start_page();/主界面menu_main();/导航界面GPS();/*init_start_end.cpp*/#include Head.h/640*350界面初始化void init_350()int graphdriver=VGA;int graphmode=1;initgraph(&graphdriver,&graphmode,D:BORLANDCBGI);/640*480界面初始化void init_480()int graphdriver=DETECT;int graphmode;initgraph(&graphdriver,&graphmode,D:BORLANDCBGI);/开场模块void start_page() start_cartoon(); /pcx_1(D:BORLANDCBpcx1.pcx); / delay(4000); /开场动画void start_cartoon()int x1,y1;int j=2;int r=0;double i;out_hz(240,80,欢迎进入,3,50,YELLOW);out_hz(100,180,交通模拟导航系统,3,60,YELLOW);out_hz(170,280,自动化六班,1,30,YELLOW);out_hz(330,280,彭军才,1,30,YELLOW);out_hz(430,280,程攀,1,30,YELLOW);out_hz(270,340,请按任意键进入,1,30,YELLOW);/显示动画while(1) for(i=0;i=0;i-,r-) if(bioskey(1)break; x1=(int)r*cos(i); y1=(int)r*sin(i); putpixel(320+x1,240+y1,j); putpixel(320+x1+1,240+y1,j); delay(2); if(j=14) j=1; j+; if(bioskey(1)break; getch();/结束动画void end_page()int i;int r=220;int x,y;int x1,y1,x2,y2;int x0=320;int y0=250;cleardevice();setbkcolor(BLACK);setcolor(BLUE);for(i=0;i=120;i=i+3)arc(x0,y0+r,30+i,30+i+3,r);x1=(int)(x0-0.866*r)-5;y1=(int)(y0-0.5*r)+11;for(i=0;i=120;i=i+3)arc(x1,y1,-90+i,-90+i+3,r);x2=(int)(x0+0.866*r)-11;y2=(int)(y0-0.5*r);for(i=0;i=120;i=i+3)arc(x2,y2,150+i,150+i+3,r);out_hz(200-22,80,谢,3,25,YELLOW);out_hz(400-22,80,谢,3,25,YELLOW);delay(200);out_hz(200-22,180,使,3,25,YELLOW);out_hz(400-22,180,用,3,25,YELLOW);out_hz(400-22,180,用,3,25,YELLOW);out_hz(350,400,自动化六班,0,20,YELLOW);out_hz(480,400,彭军才,0,20,YELLOW);out_hz(550,400,程攀,0,20,YELLOW);setcolor(YELLOW);x=(int)(x0-0.866*r)-5;y=(int)(y0-0.5*r)+11;for(i=0;i=120;i=i+3)if(bioskey(1)break;arc(x,y,-90+i,-90+i+3,r);delay(30);x=(int)(x0+0.866*r)-11;y=(int)(y0-0.5*r);for(i=0;i=120;i=i+3)if(bioskey(1)break;arc(x,y,150+i,150+i+3,r);delay(30);for(i=0;ired); outp(PALETTE_DATA,color-green); outp(PALETTE_DATA,color-blue);void PCX_Load_Screen(char * enable_palette) / this function loads a pcx a picture structure, the actual image / data for the pcx decompressed and expanded into a secondary buffer / within the picture structure, the separate images can be grabbed from this / buffer later. also the header and palette are loaded FILE *fp; unsigned char far *video_buffer=(char far *)0xA0000000L; int num_bytes,index; unsigned int count; unsigned char data; RGB_color *palette; palette=(RGB_color *)malloc(256*sizeof(RGB_color); if(palette!=NULL) if(fp = fopen(,rb)!=NULL) fseek(fp,128L,SEEK_SET); / load the data and decompress into buffer count=0; while(count=192 & data0) / image-buffercount+ = data; video_buffercount+=data; / end while / end if rle else / actual data, just copy it into buffer at next location /image-buffercount+ = data; video_buffercount+=data; / end else not rle / end while for (index=0; index 2); / get the green component paletteindex.green = (getc(fp) 2); / get the blue component paletteindex.blue = (getc(fp) 2); / end for index fclose(fp); fp=NULL; / change the palette to newly loaded palette if commanded to do so if (enable_palette) for (index=0; index140&x120&y20&x440&y200&x200&y185&x240&y110&x440&y230&x440&y410&x120&y500&x120&y455&x240&y380&x440&y590&x120&y455&x440&y460) picture_show_2(12); cleardevice(); menu_main(); void picture_show_2(int i)/显示图片switch(i)case 1: cleardevice(); pcx(D:BORLANDCBpcxhuake6.pcx); break;case 2: cleardevice(); pcx(D:BORLANDCBpcxhuake11.pcx); break;case 3: cleardevice(); pcx(D:BORLANDCBpcxhuake9.pcx); break;case 4: cleardevice(); pcx(D:BORLANDCBpcxhuake15.pcx); break;case 5: cleardevice(); pcx(D:BORLANDCBpcxhuake4.pcx); break;case
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!