毕业设计论文十字路口车流模拟系统

上传人:大米 文档编号:493549705 上传时间:2022-09-30 格式:DOC 页数:20 大小:766KB
返回 下载 相关 举报
毕业设计论文十字路口车流模拟系统_第1页
第1页 / 共20页
毕业设计论文十字路口车流模拟系统_第2页
第2页 / 共20页
毕业设计论文十字路口车流模拟系统_第3页
第3页 / 共20页
毕业设计论文十字路口车流模拟系统_第4页
第4页 / 共20页
毕业设计论文十字路口车流模拟系统_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《毕业设计论文十字路口车流模拟系统》由会员分享,可在线阅读,更多相关《毕业设计论文十字路口车流模拟系统(20页珍藏版)》请在金锄头文库上搜索。

1、上海交通大学计算机科学与工程系学士论文十字路口车流模拟系统系 别计算机科学与工程系学科专业计算机科学与技术研究方向图形图像姓 名导 师上海交通大学计算机科学与工程系2004年6月摘要 十字路口模拟涉及到图形图像处理与最优控制算法,是一项有着较强应用前景的技术。一方面可以模拟多个十字路口的交通网,研究总体最佳控制算法;另一方面可以在游戏及虚拟现实中有所应用,如模拟城市就使用到了十字路口模拟的技术。 本项目是实现十字路口模拟的一些基本的功能,只模拟了一个十字路口,单车道,且不涉及智能最优控制算法,而只是一个比较简单的控制算法。专注于图形图像方面的实现,如何使整个模拟系统尽可能的显得真实。可以在基于

2、本项目的基础上发展和完善智能最优控制算法,以及交通网,使之达到实际应用的水平。关键词:图像合成,移动,红绿灯控制,探测,转弯。AbstractThe simulation of crossroads refers to image process and best control algorithm and is a technology which has good potentiality in application. It can simulate a traffic net that contains many crossroads to research the best cont

3、rol algorithm. It also can be used in games such as SimCity.This project simulates some basic functions of a crossroads, only one crossroads, one lane and dont refer to best control algorithm but a simple algorithm. It is mainly about the realization of image: how to make whole system as really as i

4、t can. Someone can develop best control algorithm and traffic net basis on the project in order to make can be use in application.Keywords: Integrate images, move, control of light, probe, turn.目录Catalog一 概述二 功能及实现三 测试四 小结五 参考书目第一部分 概述l 项目名称十字路口车流模拟系统l 功能概述模拟十字路口车流情况,并用一个红绿灯实现对车流的控制。 汽车在四边的道路末端随机出现,

5、沿着既定方向移动。在十字路口处如果是红灯,车流会停止等待灯变绿,然后再做出选择;若是绿灯会随机做出3种选择:小转弯、大转弯或直行。一辆轿车若检测到前方有车会自动停下来以免撞车。车行到路的末端会自动消失。如此往复形成一个循环,完成对十字路口车流的模拟。l 可控参数车速;进入流量(进入车流随机范围),(四个方向);End_7()(696,100)D Position4(660,100)l 总图(PIC1)End_5()(960,564)End_3()(370,600)End_2()(160,302)A Position1(160,330)C Position2(960,538)B Position

6、3(400,610)run_2()run_1()run_5()run_6()run_3()run_4()run_8()run_7()第二部分 功能及实现l 背景图像背景图像是从模拟城市IV中截得的,十分逼真和美观。汽车的图像与背景图像的合成,即能完成运动的十字路口模拟。l 图像合成 上图是轿车的图像,尺寸是48*31。 若直接和背景图像合成,会出现如下情况:此时就需要消去轿车图片中白色的背景转而换成背景图片中的像素。即所谓的精灵图像合成。一般用GDI的BitBlt函数方法实现之,叫做光栅操作。 光栅操作一来烦琐,二来效率不是很高,所以在设计中没有采用。设计中采用的是对内存DC直接操作的方式来合

7、成图像的。创建两个内存DC,一个放入背景图像,一个放入小车图像。对小车图像进行逐点循环,若小车图像的当前像素点是白色,则背景图像的对应像素点颜色不变,否则颜色设成小车图像当前点的颜色。如此便实现了小车图像和背景图像的无缝合成。具体算法如下:准备工作创建BITMAP 对象并装入位图资源获得显示DC的指针CDC* pDC=GetDC();创建与显示DC兼容的内存DC:m_pbackMemDCm_pbackMemDC-CreateCompatibleDC(pDC);创建与显示DC兼容的内存DC:m_pcarMemDC_1m_pcarMemDCi-CreateCompatibleDC(pDC);bac

8、kBitmap-m_pbackMemDCm_pbackMemDC-SelectObject(&backBitmap);carBitmap-m_pcarMemDC_1m_pcarMemDCi-SelectObject(&carBitmapH);合并算法 对m_pcarMemDCi进行双重循环,遍历每一像素点Integrate_H(double x,double y)for(int i=0;i48;i+)for(int j=0;jGetPixel(i,j);若颜色不是白色if(currentColor!=RGB(255,255,255)m_pbackMemDC中对应点设为car的颜色(意味着若是白

9、色,则m_pbackMemDC中相应点颜色不变,达到了将白色底色过滤的目的)m_pbackMemDC-SetPixel(x+i,y+j,currentColor);获得显示DC的指针CDC* pDC=GetDC();红绿灯颜色控制LightControl();显示m_pbackMemDC(已被修改过,合成后的图像)pDC-BitBlt(0,0,m_nMaxX,m_nMaxY,m_pbackMemDC,0,0,SRCCOPY);释放显示DCReleaseDC(pDC);采用了此算法的合成后图像如下图所示:上述的小车图像是东西向的,南北向马路则要加载如下的小车图像:尺寸是34*36。合并算法基本是

10、一样的,只是小车图像的逐点循环稍微改变一下,因为尺寸有所变化:for(int i=0;i34;i+)for(int j=0;j36;j+) 除此之外,还有些十字路口转弯的小车图像,加载后也只需把循环改变即可,算法的改变都相同。l 定时器采用了定时器功能,即先设置一个定时器,然后重写OnTimer函数。功能是每过定时器设定的时间段系统自动调用OnTimer函数一次。程序中用到定时器的功能是为了每过固定的一段时间重画整个图像。每下个时间段的红绿灯的状态以及小车的位置都基于上个时间段的状态而得出的。定时器的具体功能我们将结合每一段路的run函数和红绿灯控制函数描述。默认的时间段是100ms,时间段其

11、实就是快播倍率,设长一点整个模拟系统就慢,设短一点整个模拟系统就快。所以可以通过控制时间段的方式来设定快播倍率。l 小车的移动(每条马路的前半段:1/4/6/8号马路)在上述的图像合成中用到了Integrate_H函数,当然还有Integrate_V等图像合成函数。这些函数都有2各参数:double x和double y。函数参数x和y定位背景图像中的一点,以此点为小车图像的左上顶点加载小车图像。改变x和y就能改变小车的位置。配合OnTimer函数,就可以实现小车的移动。在PIC1中我们可以看到小车只可能从A/B/C/D四个点中的一个出现。可以测出这些点的坐标:A(160,330);B(400

12、,610);C(960,538);D(660,100)。我们定义了两个数组:int Position_x20;int Position_y20;给Position_x1和Position_y1赋值:Position_x1=160;Position_y1=330;如果调用Integrate_H(int Position_x20,int Position_y20),小车将在A点显示。由此可见(int Position_xi,int Position_yi)就是第i辆小车的位置。所以说只要改变Position_xi和Position_yi的值就能改变小车的位置。我们做如下的改动:Position_x

13、1+=10;Position_y1+=3;然后再调用Integrate_H(int Position_x20,int Position_y20),小车显示的位置便在了A点的前方一点点。我们都知道动画的原理就是把许多幅图像一幅接一幅地播放,每幅图像都较前一幅有所变化,这样连续播放起来就给人以动画的感觉。小车移动也是如此。以第一辆小车并且起始点为A点为例,第一段路的移动算法如下:系统初始化时设定定时器,以100ms为时间段;设定Position_x1和Position_y1的初始值;Integrate_H(Position_x1,Position_y1);OnTimer中调用run_1(1)函数;(不同路段有不同的run函数)run_1(int i) 若还没到十字路口Position_xi+=10*speedRate;Position_yi+=3*speedRate;Integrate_H(Position_xi,Position_yi);这只是最基本的一个移动算法,真正的run函数还将添加很多功能。在此算法中,首先在A点处显示小车,然后每过100ms,因为路是斜的视角,小车向右移动10个像素,再向下移动3个像素,即在路上

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号