十字路口交通仿真程序报告 C语言课程设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
随机决定产生一辆车到 12 条道路中的某条道路 enterQueue.c
被 CARMAKER.c 调用,初始化被产生车的颜色和位置信息,使队尾指针增 1, 将这辆车的信息写入循环队列。
adjustPosition.c 车完成转弯过程中由于未知原因,车有些变形,使用此文件中的函数调
整坐标相对位置,使车恢复正常形状
一些发达国家率先意识并发明了十字路口的智能交通灯改善了这种情况, 我们国家也正在谈及智能交通灯。这就是启发我们小组对十字路口的智能交通进 行模拟的原因。模拟交通信号控制下路口的交通情况,是非常有实际意义的。在现实生活
中,一个路口的交通信号灯可能要化很长的时间来调试。如果将这个过程用程序来模拟,那 将可以节省时间,同时也可以考虑更多的复杂情况。
3 程序设计流程
2.2 菜单界面流程图如下
箭
头
光
标
移
动
其中光标在帮助可初始化下级按钮上的流程如下: 下面是十字路口交通模拟时一些主要函数的执行流程和调用关系图。
4 重要数据说明:
每辆车的数据信息及数据结构说明
#define MAXLEN 20 #define N 12 #define stepx 3 #define stepy 3 #define PI 3.141592653 #define angleIncre PI/180
标可以参与计算,只是这辆车还没到达十字路口中央。 position=1,表示该车正在十字路口中央行驶,这时该车可能是在转弯,也可能在直行 position=2,该车已经走过十字路口(不论是转弯或直行)。 position=3,表示该车的坐标已经超出屏幕范围,应该将其出队了。 turnflag:转弯标记 若是直行车,则其 turnflag 恒为 0; 若是转弯车,未到十字路口中央时,其 turnflag=0,在十字路口转弯时 turnflag=1,转过
int readmousezone(struct mouse mouse,struct button mbutton[],int flag1)//flag1
是帮助下级按钮是否存在的标志,这主要是考虑到帮助下级按钮和别的按钮可能在位置上有
重合
Button.c 用以界面上按钮的功能
light_button 点亮按钮(表示处于激活状态) unlight_button 使按钮恢复不可激活状态 warninformation 温馨提示窗口
前进(直行或左转) NARROW.c 画指向北边的箭头图像 nsstraight.c 绘制南北方向直行的交通灯 nsswerve.c 绘制南北方向转弯的交通灯 QueueEmpty.c 检测一个队列是否为空 redrawZebra.c 重画斑马线。因为一辆车轧过斑马线后,斑马线补覆盖掉,所以需要重画 rightturnLamp.c 东西南北四大车道右转的交通灯 TELLTIME.c 用于报告时间,实现倒计时和交通灯模式的判定 WARROW.c 绘制指向西边的信号灯 westraight.c 东西直行交通灯 weswerve.c 东西左转弯交通灯 yellowlamps.c 各条路黄灯模式,用于实现黄灯功能
弯后 turnflag=2; alarm: 每辆车的安全警报信息
alarm=0,该车与前车的距离大于安全距离; alarm=1,该车与前车距离小于安全距离,不能再向前行驶;
angle: 每条道路上转弯车转弯位置不同,采用统一的逆时针计算角度,angle 储存某条道路 上转弯车统一的初始角度值,但是后来因为采用了新的判断转弯是否完成的方法,所 以这个量就多余了
目前,国内的红绿灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。 加上一个倒计时的显示计时器来控制行车。各地交警根据以往经验设定红绿灯时间,不顾当 前道路上交通车辆数的实际情况变化,是固定而僵化的,这常导致绿灯方向车辆较少,红灯 方向车辆积压,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交 通堵塞。
汉字显示技术
define_button.c
void define_button(struct button mbutton[])
定义各按钮
Mousexiugai .c 鼠标相关
void initialmouse(struct mouse mousenew,void *mouse0,void*mouse1,void**bk)
typedef struct { int x[MAXLEN][N],y[MAXLEN][N]; int centerx,centery,xstep,ystep,roadNum; int color[MAXLEN],position[MAXLEN],turnflag[MAXLEN],alarm[MAXLEN]; double angle[MAXLEN],angleIncrement,angleLimit; int front,rear; }Queue;
C 语言课程设计报告
题 目 : 十字路口交通图形仿真系统
班 级 : 自动化 09XX
制 作 : 李四
学号: U2009XXXXX
张三 学号: U2009XXXXX
指导教师: 周纯杰 何顶新 周凯波 彭刚
1 引言
1.1 背景
近几年我国汽车保有量逐年增加,2008 年的保有量为 4975 万辆,2009 年达到 6300 多万辆,到今年底,最晚明年就能达到 7500 万辆的规模。按保守估计,未来 中国保有量能够达到 4.9 亿辆左右——国家信息中心信息资源开发部主任徐长明
//一条道路对应的一个队列的容量为 20 //用 12 个点画一辆车 //若东西方向直线前进,一辆车每次前进 3 个单位长度 //若南北直线前进,一辆车每次前进 3 个单位长度
//若转弯,每次转过的角度为 PI/180
每条道路用一个队列储存道路上所有活动车的数据信息,12 个队列构成一个队列组 该队列的定义为:
drawscene.c 画十字路口主界面
EARROW.c 画指向东方的箭头
getcoordinate.c 用于计算车辆直行、左转、右转的坐标 getturnflag.c 用于获得车当前的位置状态、转弯状态 INITDATA.c 用于函数运行时程序需要的数据结构并初始化数据 ISALARM.c 用于检测当前车与其前一辆车的距离,如果距离在安全距离之内,则报警 Lampcontrol.c 用于实现四种交通灯模式的控制 MAINFUN.c 主函数,调用各种函数 movePermit.c 用于判断一辆车在当前位置、和当前交通灯模式、安全距离警报下是否应该
2.2 运行环境
操作系统:DOS;
运行软件:borland c++ 3.0; tc 2.0 及以上版本;(其中任意一个)
3 程序各部分功能概述
WELCOME .c
void welcome(void)
欢迎界面
XIEHANZI .c
ຫໍສະໝຸດ Baidu
int xiehanzi(int x,int y,int color,char word0[])
信息的变化 active_to_un 写光标由未激活到激活按钮上时的变化 DRAWMENU .c 画菜单上初始画面 void drawmenu(struct button*mbutton) void drawbutton(struct button button )被 drawmenu 调用,画屏幕上的按钮 key_control .c int key_control(struct mouse*msnew,struct button *mbutton,struct mouse *msold,void*mouse0,void*mouse1,void **bk,void **windowbk,int cold,int*f1,int *f2,int *pc) 键盘操作(菜单界面) MENU .c
angleIncrement:一次执行转弯转过的角度,在本程序中每个点一次转 PI/180 angleLimit:不同道路上转弯车转弯完成后对应的位置不同,所以处于的角度不同,原先定义
数据说明: centerx、centery: 某路车转弯时的圆心的横纵坐标 roadNum:该队列对应的道路编号,即是哪一条道路的队列 color:每辆车的颜色信息 position:每辆车的位置信息
position=-1,表示该辆车被删出队列(出队)后,沿未入队 position=0,调用 enterQueue 入队时,给 position 赋 0 值,表示该辆车已入队,它的坐
clrwarninformation 清除温馨提示窗口 getwindowbk 在弹出提示窗口之前储存其背景 clr_window 清除弹出窗口 push_window 弹出窗口(调用 push_mhelp,push_mfunction,push_muse_key , push_muse_mouse,push_mwe) onactivebutton 整体写光标在可以初始化按钮上时鼠标形状,按钮形象,提示栏
初始化鼠标
void drawmouse(void**ms0,void**ms1);画两种形状鼠标
void show_mouse( int mc,struct mouse mouse,void *mouse0,void*mouse1,void**bk);
在屏幕上点亮鼠标
void hidemouse( int mc,struct mouse,void*background);消失屏幕上的鼠标
如今我国道路上的车辆越来越多,近年更是显著增加,而道路的增加却远远不 够,以致公路堵车情况日益频繁,在大中城市更是屡见不险。当上班家族望着僵死的汽 车长龙长吁短叹,当消防车十万火急赶去救火或是急救车千钧一发抢救生命却寸步难移…… 我们是不是该对现在的交通情况略作改善?
十字路口更是交通的枢纽,是交通的重中之重,如何提高十字路口的通行效率是在现 有道路情况不变情况下的关键。
void readmouse(struct mouse*msnew,int *kf);读取鼠标位置及按键状态
void
movemouse(int
mm,struct
mouse
*msold,struct
mouse*msnew,void*mouse0,void*mouse1,void **bk);移动鼠标(4 种情况)
CONVERT.c
用于汽车转弯时,旋转坐标到新位置的计算
COVERCAR.c
用于用背景色填充的全等车覆盖掉旧坐标的有颜色的车,与 drawcar()函 数合用,实现车的动态行驶
DELQUEUE.c
检测一队车中,是否有车的坐标已超出屏幕范围,如果是,则删除该车, 让该车出队
DRAWCAR.c 画出新位置处的车,与 covercar()函数合用,实现车的动态前进
主函数 菜单功能 void main() void menu()、 int menu_contro(struct mouse*msnew,struct button *mbutton,struct mouse *msold,void*mouse0,void*mouse1,void **bk,void **windowbk) CARMAKER.c
2 软件概述
2.1 任务分析
本程序在主界面支持鼠标,键盘两种操作模式,功能选择采用图形化方法,具有良好的
人机交互性。程序模拟仿真部分综合考虑各车道在各种条件(天气、时间、人为)下,车辆 在十字路口各种行为(直行、左转、右转),各车道上车辆出现的概率及数目均为随机情况 下 模 拟 智 能 交 通灯 控 制下 的 十 字 路 口 的交 通 运行 情 况 , 支 持 键盘 热 键 Esc ( 退 出 程 序),Backspace(退回主界面),P(暂停)等,十分便于操作分析。
1.2 编写目的
对十字路口交通情况的完全模拟,即各车辆数目,行走方向,何时出现均为随机情况, 使智能交通开发者有一个比较准确的模拟平台,以方便其了解十字路口状况。并且针对十字 路口的特点,提出我们自己的解决办法。
在这次课程设计中,我们不仅学到了图形化处理,对上学期的 c 语言课程有了前所未的 认识,更重要的是,我们学到了软件开发的基本方法,人机交互的基础知识与意识,对以后 的学习奠定了基础。并且,通过这次工作量十分大的课程设计,我们极大提高了动手能力, 自学能力,团队合作分工的精神。
被 CARMAKER.c 调用,初始化被产生车的颜色和位置信息,使队尾指针增 1, 将这辆车的信息写入循环队列。
adjustPosition.c 车完成转弯过程中由于未知原因,车有些变形,使用此文件中的函数调
整坐标相对位置,使车恢复正常形状
一些发达国家率先意识并发明了十字路口的智能交通灯改善了这种情况, 我们国家也正在谈及智能交通灯。这就是启发我们小组对十字路口的智能交通进 行模拟的原因。模拟交通信号控制下路口的交通情况,是非常有实际意义的。在现实生活
中,一个路口的交通信号灯可能要化很长的时间来调试。如果将这个过程用程序来模拟,那 将可以节省时间,同时也可以考虑更多的复杂情况。
3 程序设计流程
2.2 菜单界面流程图如下
箭
头
光
标
移
动
其中光标在帮助可初始化下级按钮上的流程如下: 下面是十字路口交通模拟时一些主要函数的执行流程和调用关系图。
4 重要数据说明:
每辆车的数据信息及数据结构说明
#define MAXLEN 20 #define N 12 #define stepx 3 #define stepy 3 #define PI 3.141592653 #define angleIncre PI/180
标可以参与计算,只是这辆车还没到达十字路口中央。 position=1,表示该车正在十字路口中央行驶,这时该车可能是在转弯,也可能在直行 position=2,该车已经走过十字路口(不论是转弯或直行)。 position=3,表示该车的坐标已经超出屏幕范围,应该将其出队了。 turnflag:转弯标记 若是直行车,则其 turnflag 恒为 0; 若是转弯车,未到十字路口中央时,其 turnflag=0,在十字路口转弯时 turnflag=1,转过
int readmousezone(struct mouse mouse,struct button mbutton[],int flag1)//flag1
是帮助下级按钮是否存在的标志,这主要是考虑到帮助下级按钮和别的按钮可能在位置上有
重合
Button.c 用以界面上按钮的功能
light_button 点亮按钮(表示处于激活状态) unlight_button 使按钮恢复不可激活状态 warninformation 温馨提示窗口
前进(直行或左转) NARROW.c 画指向北边的箭头图像 nsstraight.c 绘制南北方向直行的交通灯 nsswerve.c 绘制南北方向转弯的交通灯 QueueEmpty.c 检测一个队列是否为空 redrawZebra.c 重画斑马线。因为一辆车轧过斑马线后,斑马线补覆盖掉,所以需要重画 rightturnLamp.c 东西南北四大车道右转的交通灯 TELLTIME.c 用于报告时间,实现倒计时和交通灯模式的判定 WARROW.c 绘制指向西边的信号灯 westraight.c 东西直行交通灯 weswerve.c 东西左转弯交通灯 yellowlamps.c 各条路黄灯模式,用于实现黄灯功能
弯后 turnflag=2; alarm: 每辆车的安全警报信息
alarm=0,该车与前车的距离大于安全距离; alarm=1,该车与前车距离小于安全距离,不能再向前行驶;
angle: 每条道路上转弯车转弯位置不同,采用统一的逆时针计算角度,angle 储存某条道路 上转弯车统一的初始角度值,但是后来因为采用了新的判断转弯是否完成的方法,所 以这个量就多余了
目前,国内的红绿灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。 加上一个倒计时的显示计时器来控制行车。各地交警根据以往经验设定红绿灯时间,不顾当 前道路上交通车辆数的实际情况变化,是固定而僵化的,这常导致绿灯方向车辆较少,红灯 方向车辆积压,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交 通堵塞。
汉字显示技术
define_button.c
void define_button(struct button mbutton[])
定义各按钮
Mousexiugai .c 鼠标相关
void initialmouse(struct mouse mousenew,void *mouse0,void*mouse1,void**bk)
typedef struct { int x[MAXLEN][N],y[MAXLEN][N]; int centerx,centery,xstep,ystep,roadNum; int color[MAXLEN],position[MAXLEN],turnflag[MAXLEN],alarm[MAXLEN]; double angle[MAXLEN],angleIncrement,angleLimit; int front,rear; }Queue;
C 语言课程设计报告
题 目 : 十字路口交通图形仿真系统
班 级 : 自动化 09XX
制 作 : 李四
学号: U2009XXXXX
张三 学号: U2009XXXXX
指导教师: 周纯杰 何顶新 周凯波 彭刚
1 引言
1.1 背景
近几年我国汽车保有量逐年增加,2008 年的保有量为 4975 万辆,2009 年达到 6300 多万辆,到今年底,最晚明年就能达到 7500 万辆的规模。按保守估计,未来 中国保有量能够达到 4.9 亿辆左右——国家信息中心信息资源开发部主任徐长明
//一条道路对应的一个队列的容量为 20 //用 12 个点画一辆车 //若东西方向直线前进,一辆车每次前进 3 个单位长度 //若南北直线前进,一辆车每次前进 3 个单位长度
//若转弯,每次转过的角度为 PI/180
每条道路用一个队列储存道路上所有活动车的数据信息,12 个队列构成一个队列组 该队列的定义为:
drawscene.c 画十字路口主界面
EARROW.c 画指向东方的箭头
getcoordinate.c 用于计算车辆直行、左转、右转的坐标 getturnflag.c 用于获得车当前的位置状态、转弯状态 INITDATA.c 用于函数运行时程序需要的数据结构并初始化数据 ISALARM.c 用于检测当前车与其前一辆车的距离,如果距离在安全距离之内,则报警 Lampcontrol.c 用于实现四种交通灯模式的控制 MAINFUN.c 主函数,调用各种函数 movePermit.c 用于判断一辆车在当前位置、和当前交通灯模式、安全距离警报下是否应该
2.2 运行环境
操作系统:DOS;
运行软件:borland c++ 3.0; tc 2.0 及以上版本;(其中任意一个)
3 程序各部分功能概述
WELCOME .c
void welcome(void)
欢迎界面
XIEHANZI .c
ຫໍສະໝຸດ Baidu
int xiehanzi(int x,int y,int color,char word0[])
信息的变化 active_to_un 写光标由未激活到激活按钮上时的变化 DRAWMENU .c 画菜单上初始画面 void drawmenu(struct button*mbutton) void drawbutton(struct button button )被 drawmenu 调用,画屏幕上的按钮 key_control .c int key_control(struct mouse*msnew,struct button *mbutton,struct mouse *msold,void*mouse0,void*mouse1,void **bk,void **windowbk,int cold,int*f1,int *f2,int *pc) 键盘操作(菜单界面) MENU .c
angleIncrement:一次执行转弯转过的角度,在本程序中每个点一次转 PI/180 angleLimit:不同道路上转弯车转弯完成后对应的位置不同,所以处于的角度不同,原先定义
数据说明: centerx、centery: 某路车转弯时的圆心的横纵坐标 roadNum:该队列对应的道路编号,即是哪一条道路的队列 color:每辆车的颜色信息 position:每辆车的位置信息
position=-1,表示该辆车被删出队列(出队)后,沿未入队 position=0,调用 enterQueue 入队时,给 position 赋 0 值,表示该辆车已入队,它的坐
clrwarninformation 清除温馨提示窗口 getwindowbk 在弹出提示窗口之前储存其背景 clr_window 清除弹出窗口 push_window 弹出窗口(调用 push_mhelp,push_mfunction,push_muse_key , push_muse_mouse,push_mwe) onactivebutton 整体写光标在可以初始化按钮上时鼠标形状,按钮形象,提示栏
初始化鼠标
void drawmouse(void**ms0,void**ms1);画两种形状鼠标
void show_mouse( int mc,struct mouse mouse,void *mouse0,void*mouse1,void**bk);
在屏幕上点亮鼠标
void hidemouse( int mc,struct mouse,void*background);消失屏幕上的鼠标
如今我国道路上的车辆越来越多,近年更是显著增加,而道路的增加却远远不 够,以致公路堵车情况日益频繁,在大中城市更是屡见不险。当上班家族望着僵死的汽 车长龙长吁短叹,当消防车十万火急赶去救火或是急救车千钧一发抢救生命却寸步难移…… 我们是不是该对现在的交通情况略作改善?
十字路口更是交通的枢纽,是交通的重中之重,如何提高十字路口的通行效率是在现 有道路情况不变情况下的关键。
void readmouse(struct mouse*msnew,int *kf);读取鼠标位置及按键状态
void
movemouse(int
mm,struct
mouse
*msold,struct
mouse*msnew,void*mouse0,void*mouse1,void **bk);移动鼠标(4 种情况)
CONVERT.c
用于汽车转弯时,旋转坐标到新位置的计算
COVERCAR.c
用于用背景色填充的全等车覆盖掉旧坐标的有颜色的车,与 drawcar()函 数合用,实现车的动态行驶
DELQUEUE.c
检测一队车中,是否有车的坐标已超出屏幕范围,如果是,则删除该车, 让该车出队
DRAWCAR.c 画出新位置处的车,与 covercar()函数合用,实现车的动态前进
主函数 菜单功能 void main() void menu()、 int menu_contro(struct mouse*msnew,struct button *mbutton,struct mouse *msold,void*mouse0,void*mouse1,void **bk,void **windowbk) CARMAKER.c
2 软件概述
2.1 任务分析
本程序在主界面支持鼠标,键盘两种操作模式,功能选择采用图形化方法,具有良好的
人机交互性。程序模拟仿真部分综合考虑各车道在各种条件(天气、时间、人为)下,车辆 在十字路口各种行为(直行、左转、右转),各车道上车辆出现的概率及数目均为随机情况 下 模 拟 智 能 交 通灯 控 制下 的 十 字 路 口 的交 通 运行 情 况 , 支 持 键盘 热 键 Esc ( 退 出 程 序),Backspace(退回主界面),P(暂停)等,十分便于操作分析。
1.2 编写目的
对十字路口交通情况的完全模拟,即各车辆数目,行走方向,何时出现均为随机情况, 使智能交通开发者有一个比较准确的模拟平台,以方便其了解十字路口状况。并且针对十字 路口的特点,提出我们自己的解决办法。
在这次课程设计中,我们不仅学到了图形化处理,对上学期的 c 语言课程有了前所未的 认识,更重要的是,我们学到了软件开发的基本方法,人机交互的基础知识与意识,对以后 的学习奠定了基础。并且,通过这次工作量十分大的课程设计,我们极大提高了动手能力, 自学能力,团队合作分工的精神。