⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 road.cpp

📁 一个完整的交叉口仿真模型 实现生成交叉口 和车辆生成 运行 跟驰等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Road.cpp: implementation of the CRoad class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CrossSimulation1.h"
#include "Road.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CRoad::CRoad()
{
	ptrToEastLane1=NULL;
	ptrToEastLane2=NULL;
	ptrToWestLane1=NULL;
	ptrToWestLane2=NULL;
	ptrToNorthLane1=NULL;
	ptrToNorthLane2=NULL;
	ptrToSouthLane1=NULL;
	ptrToSouthLane2=NULL;
}

CRoad::~CRoad()
{

}

void CRoad::EastGenerateCar()
{
	static CCar* EastCarLane1Temp1=NULL;
	static CCar* EastCarLane1Temp2=NULL;
	static CCar* EastCarLane2Temp1=NULL;
	static CCar* EastCarLane2Temp2=NULL;
	
    float n1=(float)rand()/32768;
	
	if(m_EastLaneNumber==4)     //为双向四车道,有两个方向产生车流
	{
		
		float n2=(float)rand()/32768;
		
		if(n1>0.99)
		{
			//第一个车道产生车,同时产生左转车辆;车道坐标点(60,m_EastLaneWidth/2);
			if(ptrToEastLane1==NULL)
			{
				ptrToEastLane1=new CCar;
				
				
				ptrToEastLane1->x=60;
				ptrToEastLane1->y=m_EastLaneWidth/2;
				ptrToEastLane1->direction=1;
				ptrToEastLane1->m_RoadID=1;
				
                
				ptrToEastLane1->ptrToBefore=NULL;
				ptrToEastLane1->ptrToNext=NULL;
				EastCarLane1Temp1=ptrToEastLane1;
				EastCarLane1Temp2=ptrToEastLane1;
				
			}
			else
			{
				
				if(n2>0.4&&EastCarLane1Temp1->x<(60-EastCarLane1Temp1->m_CarLenth*2))
				{
					
					EastCarLane1Temp1->ptrToNext=new CCar;
					EastCarLane1Temp1=EastCarLane1Temp1->ptrToNext;
					EastCarLane1Temp1->ptrToBefore=EastCarLane1Temp2;
					EastCarLane1Temp1->ptrToNext=NULL;
					EastCarLane1Temp2=EastCarLane1Temp1;
					
					
					EastCarLane1Temp1->x=60;
					EastCarLane1Temp1->y=m_EastLaneWidth/2;
					EastCarLane1Temp1->direction=1;
					EastCarLane1Temp1->m_RoadID=1;
					EastCarLane1Temp1->b_TurnLeft=TRUE; //产生左转车辆;
					
				}
				if(n2<0.4&&EastCarLane1Temp1->x<(60-EastCarLane1Temp1->m_CarLenth*2))
				{
					EastCarLane1Temp1->ptrToNext=new CCar;
					EastCarLane1Temp1=EastCarLane1Temp1->ptrToNext;
					EastCarLane1Temp1->ptrToBefore=EastCarLane1Temp2;
					EastCarLane1Temp1->ptrToNext=NULL;
					EastCarLane1Temp2=EastCarLane1Temp1;
					
					
					EastCarLane1Temp1->x=60;
					EastCarLane1Temp1->y=m_EastLaneWidth/2;
					EastCarLane1Temp1->direction=1;
					EastCarLane1Temp1->m_RoadID=1;
					//产生非左转车辆;
				}
				
			}
		}
		
		if(n1<0.01)
		{
			//第二个车道产生车,同时产生右转车辆;车道坐标点(60,3*m_EastLaneWidth/2);
			if(ptrToEastLane2==NULL)
			{
				ptrToEastLane2=new CCar;
				ptrToEastLane2->x=60;
				ptrToEastLane2->y=3*m_EastLaneWidth/2;
				ptrToEastLane2->direction=1;
				ptrToEastLane2->m_RoadID=1;
				
				ptrToEastLane2->ptrToBefore=NULL;
				ptrToEastLane2->ptrToNext=NULL;
				EastCarLane2Temp1=ptrToEastLane2;
				EastCarLane2Temp2=ptrToEastLane2;
				
			}
			else
			{
				
				if(n2<0.4&&EastCarLane2Temp1->x<(60-EastCarLane2Temp1->m_CarLenth*2))
				{
					EastCarLane2Temp1->ptrToNext=new CCar;
					EastCarLane2Temp1=EastCarLane2Temp1->ptrToNext;
					EastCarLane2Temp1->ptrToBefore=EastCarLane2Temp2;
					EastCarLane2Temp1->ptrToNext=NULL;
					EastCarLane2Temp2=EastCarLane2Temp1;
					
					EastCarLane2Temp1->x=60;
					EastCarLane2Temp1->y=3*m_EastLaneWidth/2;
					EastCarLane2Temp1->direction=1;
					EastCarLane2Temp1->m_RoadID=1;
					EastCarLane2Temp1->b_TurnRight=TRUE;
					
				}
				if(n2>0.4&&EastCarLane2Temp1->x<(60-EastCarLane2Temp1->m_CarLenth*2))
				{
					EastCarLane2Temp1->ptrToNext=new CCar;
					EastCarLane2Temp1=EastCarLane2Temp1->ptrToNext;
					EastCarLane2Temp1->ptrToBefore=EastCarLane2Temp2;
					EastCarLane2Temp1->ptrToNext=NULL;
					EastCarLane2Temp2=EastCarLane2Temp1;
					
					EastCarLane2Temp1->x=60;
					EastCarLane2Temp1->y=3*m_EastLaneWidth/2;
					EastCarLane2Temp1->direction=1;
					EastCarLane2Temp1->m_RoadID=1;
					
				}
				
			}
			
		}
		
	}
}


	   
void CRoad::WestGenerateCar()
{
    static CCar* WestCarLane1Temp1=NULL;
	static CCar* WestCarLane1Temp2=NULL;
	static CCar* WestCarLane2Temp1=NULL;
	static CCar* WestCarLane2Temp2=NULL;
	
    float n1=(float)rand()/32768;
/////////////////////西向道路产生车流/////////////////////////

	if(m_WestLaneNumber==4)     //为双向四车道,有两个方向产生车流
	{
		
		float n2=(float)rand()/32768;
		
		if(n1>0.99)
		{
			//第一个车道产生车,同时产生左转车辆;车道坐标点(-60,-m_WestLaneWidth/2);
			if(ptrToWestLane1==NULL)
			{
				ptrToWestLane1=new CCar;
				ptrToWestLane1->x=-60;
				ptrToWestLane1->y=-m_WestLaneWidth/2;
				ptrToWestLane1->direction=2;
				ptrToWestLane1->m_RoadID=2;
				
                
				ptrToWestLane1->ptrToBefore=NULL;
				ptrToWestLane1->ptrToNext=NULL;
				WestCarLane1Temp1=ptrToWestLane1;
				WestCarLane1Temp2=ptrToWestLane1;
				
			}
			else
			{
				
				if(n2>0.4&&WestCarLane1Temp1->x>(-60+WestCarLane1Temp1->m_CarLenth*2))
				{
					
					WestCarLane1Temp1->ptrToNext=new CCar;
					WestCarLane1Temp1=WestCarLane1Temp1->ptrToNext;
					WestCarLane1Temp1->ptrToBefore=WestCarLane1Temp2;
					WestCarLane1Temp1->ptrToNext=NULL;
					WestCarLane1Temp2=WestCarLane1Temp1;
					
					
					WestCarLane1Temp1->x=-60;
					WestCarLane1Temp1->y=-m_WestLaneWidth/2;
					WestCarLane1Temp1->direction=2;
					WestCarLane1Temp1->m_RoadID=2;
					WestCarLane1Temp1->b_TurnLeft=TRUE; //产生左转车辆;
					
				}
				if(n2<0.4&&WestCarLane1Temp1->x>(-60+WestCarLane1Temp1->m_CarLenth*2))
				{
					WestCarLane1Temp1->ptrToNext=new CCar;
					WestCarLane1Temp1=WestCarLane1Temp1->ptrToNext;
					WestCarLane1Temp1->ptrToBefore=WestCarLane1Temp2;
					WestCarLane1Temp1->ptrToNext=NULL;
					WestCarLane1Temp2=WestCarLane1Temp1;
					
					
					WestCarLane1Temp1->x=-60;
					WestCarLane1Temp1->y=-m_WestLaneWidth/2;
					WestCarLane1Temp1->direction=2;
					WestCarLane1Temp1->m_RoadID=2;
					//产生非左转车辆;
				}
				
			}
		}
		
		if(n1<0.01)
		{
			//第二个车道产生车,同时产生右转车辆;车道坐标点(-60,-3*m_WestLaneWidth/2);
			if(ptrToWestLane2==NULL)
			{
				ptrToWestLane2=new CCar;
				ptrToWestLane2->x=-60;
				ptrToWestLane2->y=-3*m_WestLaneWidth/2;
				ptrToWestLane2->direction=2;
				ptrToWestLane2->m_RoadID=2;
				
				ptrToWestLane2->ptrToBefore=NULL;
				ptrToWestLane2->ptrToNext=NULL;
				WestCarLane2Temp1=ptrToWestLane2;
				WestCarLane2Temp2=ptrToWestLane2;
				
			}
			else
			{
				
				if(n2<0.4&&WestCarLane2Temp1->x>(-60+WestCarLane2Temp1->m_CarLenth*2))
				{
					WestCarLane2Temp1->ptrToNext=new CCar;
					WestCarLane2Temp1=WestCarLane2Temp1->ptrToNext;
					WestCarLane2Temp1->ptrToBefore=WestCarLane2Temp2;
					WestCarLane2Temp1->ptrToNext=NULL;
					WestCarLane2Temp2=WestCarLane2Temp1;
					
					WestCarLane2Temp1->x=-60;
					WestCarLane2Temp1->y=-3*m_WestLaneWidth/2;
					WestCarLane2Temp1->direction=2;
					WestCarLane2Temp1->m_RoadID=2;
					WestCarLane2Temp1->b_TurnRight=TRUE;
					
				}
				if(n2>0.4&&WestCarLane2Temp1->x>(-60+WestCarLane2Temp1->m_CarLenth*2))
				{
					WestCarLane2Temp1->ptrToNext=new CCar;
					WestCarLane2Temp1=WestCarLane2Temp1->ptrToNext;
					WestCarLane2Temp1->ptrToBefore=WestCarLane2Temp2;
					WestCarLane2Temp1->ptrToNext=NULL;
					WestCarLane2Temp2=WestCarLane2Temp1;
					

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -