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

📄 road.cpp

📁 一个完整的交叉口仿真模型 实现生成交叉口 和车辆生成 运行 跟驰等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					WestCarLane2Temp1->x=-60;
					WestCarLane2Temp1->y=-3*m_WestLaneWidth/2;
					WestCarLane2Temp1->direction=2;
					WestCarLane2Temp1->m_RoadID=2;
					
				}
				
			}
			
		}
		
	}


}

void CRoad::SouthGenerateCar()
{
	static CCar* SouthCarLane1Temp1=NULL;
	static CCar* SouthCarLane1Temp2=NULL;
	static CCar* SouthCarLane2Temp1=NULL;
	static CCar* SouthCarLane2Temp2=NULL;
	
    float n1=(float)rand()/32768;
	/////////////////////西向道路产生车流/////////////////////////
	
	if(m_SouthLaneNumber==4)     //为双向四车道,有两个方向产生车流
	{
		
		float n2=(float)rand()/32768;
		
		if(n1>0.99)
		{
			//第一个车道产生车,同时产生左转车辆;车道坐标点(m_SouthLaneWidth/2,-60);
			if(ptrToSouthLane1==NULL)
			{
				ptrToSouthLane1=new CCar;
				ptrToSouthLane1->x=m_SouthLaneWidth/2;
				ptrToSouthLane1->y=-60;
				ptrToSouthLane1->direction=3;
				ptrToSouthLane1->m_RoadID=3;
				
                
				ptrToSouthLane1->ptrToBefore=NULL;
				ptrToSouthLane1->ptrToNext=NULL;
				SouthCarLane1Temp1=ptrToSouthLane1;
				SouthCarLane1Temp2=ptrToSouthLane1;
				
			}
			else
			{
				
				if(n2>0.4&&SouthCarLane1Temp1->y>(-60+SouthCarLane1Temp1->m_CarLenth*2))
				{
					
					SouthCarLane1Temp1->ptrToNext=new CCar;
					SouthCarLane1Temp1=SouthCarLane1Temp1->ptrToNext;
					SouthCarLane1Temp1->ptrToBefore=SouthCarLane1Temp2;
					SouthCarLane1Temp1->ptrToNext=NULL;
					SouthCarLane1Temp2=SouthCarLane1Temp1;
					
					
					SouthCarLane1Temp1->x=m_SouthLaneWidth/2;
					SouthCarLane1Temp1->y=-60;
					SouthCarLane1Temp1->direction=3;
					SouthCarLane1Temp1->m_RoadID=3;
					SouthCarLane1Temp1->b_TurnLeft=TRUE; //产生左转车辆;
					
				}
				if(n2<0.4&&SouthCarLane1Temp1->y>(-60+SouthCarLane1Temp1->m_CarLenth*2))
				{
					SouthCarLane1Temp1->ptrToNext=new CCar;
					SouthCarLane1Temp1=SouthCarLane1Temp1->ptrToNext;
					SouthCarLane1Temp1->ptrToBefore=SouthCarLane1Temp2;
					SouthCarLane1Temp1->ptrToNext=NULL;
					SouthCarLane1Temp2=SouthCarLane1Temp1;
					
					
					SouthCarLane1Temp1->x=m_SouthLaneWidth/2;
					SouthCarLane1Temp1->y=-60;
					SouthCarLane1Temp1->direction=3;
					SouthCarLane1Temp1->m_RoadID=3;
					//产生非左转车辆;
				}
				
			}
		}
		
		if(n1<0.01)
		{
			//第二个车道产生车,同时产生右转车辆;车道坐标点(3*m_SouthLaneWidth/2,-60);
			if(ptrToSouthLane2==NULL)
			{
				ptrToSouthLane2=new CCar;
				ptrToSouthLane2->x=3*m_SouthLaneWidth/2;
				ptrToSouthLane2->y=-60;
				ptrToSouthLane2->direction=3;
				ptrToSouthLane2->m_RoadID=3;
				
				ptrToSouthLane2->ptrToBefore=NULL;
				ptrToSouthLane2->ptrToNext=NULL;
				SouthCarLane2Temp1=ptrToSouthLane2;
				SouthCarLane2Temp2=ptrToSouthLane2;
				
			}
			else
			{
				
				if(n2<0.4&&SouthCarLane2Temp1->y>(-60+SouthCarLane2Temp1->m_CarLenth*2))
				{
					SouthCarLane2Temp1->ptrToNext=new CCar;
					SouthCarLane2Temp1=SouthCarLane2Temp1->ptrToNext;
					SouthCarLane2Temp1->ptrToBefore=SouthCarLane2Temp2;
					SouthCarLane2Temp1->ptrToNext=NULL;
					SouthCarLane2Temp2=SouthCarLane2Temp1;
					
					SouthCarLane2Temp1->x=3*m_SouthLaneWidth/2;
					SouthCarLane2Temp1->y=-60;
					SouthCarLane2Temp1->direction=3;
					SouthCarLane2Temp1->m_RoadID=3;
					SouthCarLane2Temp1->b_TurnRight=TRUE;
					
				}
				if(n2>0.4&&SouthCarLane2Temp1->y>(-60+SouthCarLane2Temp1->m_CarLenth*2))
				{
					SouthCarLane2Temp1->ptrToNext=new CCar;
					SouthCarLane2Temp1=SouthCarLane2Temp1->ptrToNext;
					SouthCarLane2Temp1->ptrToBefore=SouthCarLane2Temp2;
					SouthCarLane2Temp1->ptrToNext=NULL;
					SouthCarLane2Temp2=SouthCarLane2Temp1;
					
					SouthCarLane2Temp1->x=3*m_SouthLaneWidth/2;
					SouthCarLane2Temp1->y=-60;
					SouthCarLane2Temp1->direction=3;
					SouthCarLane2Temp1->m_RoadID=3;
					SouthCarLane2Temp1->b_TurnRight=TRUE;
					
				}
				
			}
			
		}
		
	}
	
}	

void CRoad::NorthGenerateCar()
{
	static CCar* NorthCarLane1Temp1=NULL;
	static CCar* NorthCarLane1Temp2=NULL;
	static CCar* NorthCarLane2Temp1=NULL;
	static CCar* NorthCarLane2Temp2=NULL;
	
    float n1=(float)rand()/32768;
	/////////////////////西向道路产生车流/////////////////////////
	
	if(m_NorthLaneNumber==4)     //为双向四车道,有两个方向产生车流
	{
		
		float n2=(float)rand()/32768;
		
		if(n1>0.99)
		{
			//第一个车道产生车,同时产生左转车辆;车道坐标点(-m_NorthLaneWidth/2,60);
			if(ptrToNorthLane1==NULL)
			{
				ptrToNorthLane1=new CCar;
				ptrToNorthLane1->x=-m_NorthLaneWidth/2;
				ptrToNorthLane1->y=60;
				ptrToNorthLane1->direction=4;
				ptrToNorthLane1->m_RoadID=4;
				
                
				ptrToNorthLane1->ptrToBefore=NULL;
				ptrToNorthLane1->ptrToNext=NULL;
				NorthCarLane1Temp1=ptrToNorthLane1;
				NorthCarLane1Temp2=ptrToNorthLane1;
				
			}
			else
			{
				
				if(n2>0.4&&NorthCarLane1Temp1->y<(60-NorthCarLane1Temp1->m_CarLenth*2))
				{
					
					NorthCarLane1Temp1->ptrToNext=new CCar;
					NorthCarLane1Temp1=NorthCarLane1Temp1->ptrToNext;
					NorthCarLane1Temp1->ptrToBefore=NorthCarLane1Temp2;
					NorthCarLane1Temp1->ptrToNext=NULL;
					NorthCarLane1Temp2=NorthCarLane1Temp1;
					
					
					NorthCarLane1Temp1->x=-m_NorthLaneWidth/2;
					NorthCarLane1Temp1->y=60;
					NorthCarLane1Temp1->direction=4;
					NorthCarLane1Temp1->m_RoadID=4;
					NorthCarLane1Temp1->b_TurnLeft=TRUE; //产生左转车辆;
					
				}
				if(n2<0.4&&NorthCarLane1Temp1->y<(60-NorthCarLane1Temp1->m_CarLenth*2))
				{
					NorthCarLane1Temp1->ptrToNext=new CCar;
					NorthCarLane1Temp1=NorthCarLane1Temp1->ptrToNext;
					NorthCarLane1Temp1->ptrToBefore=NorthCarLane1Temp2;
					NorthCarLane1Temp1->ptrToNext=NULL;
					NorthCarLane1Temp2=NorthCarLane1Temp1;
					
					
					NorthCarLane1Temp1->x=m_NorthLaneWidth/2;
					NorthCarLane1Temp1->y=-60;
					NorthCarLane1Temp1->direction=4;
					NorthCarLane1Temp1->m_RoadID=4;
					//产生非左转车辆;
				}
				
			}
		}
		
		if(n1<0.01)
		{
			//第二个车道产生车,同时产生右转车辆;车道坐标点(-3*m_NorthLaneWidth/2,60);
			if(ptrToNorthLane2==NULL)
			{
				ptrToNorthLane2=new CCar;
				ptrToNorthLane2->x=-3*m_NorthLaneWidth/2;
				ptrToNorthLane2->y=60;
				ptrToNorthLane2->direction=4;
				ptrToNorthLane2->m_RoadID=4;
				
				ptrToNorthLane2->ptrToBefore=NULL;
				ptrToNorthLane2->ptrToNext=NULL;
				NorthCarLane2Temp1=ptrToNorthLane2;
				NorthCarLane2Temp2=ptrToNorthLane2;
				
			}
			else
			{
				
				if(n2<0.4&&NorthCarLane2Temp1->y<(60-NorthCarLane2Temp1->m_CarLenth*2))
				{
					NorthCarLane2Temp1->ptrToNext=new CCar;
					NorthCarLane2Temp1=NorthCarLane2Temp1->ptrToNext;
					NorthCarLane2Temp1->ptrToBefore=NorthCarLane2Temp2;
					NorthCarLane2Temp1->ptrToNext=NULL;
					NorthCarLane2Temp2=NorthCarLane2Temp1;
					
					NorthCarLane2Temp1->x=-3*m_NorthLaneWidth/2;
					NorthCarLane2Temp1->y=60;
					NorthCarLane2Temp1->direction=4;
					NorthCarLane2Temp1->m_RoadID=4;
					NorthCarLane2Temp1->b_TurnRight=TRUE;
					
				}
				if(n2>0.4&&NorthCarLane2Temp1->y<(60-NorthCarLane2Temp1->m_CarLenth*2))
				{
					NorthCarLane2Temp1->ptrToNext=new CCar;
					NorthCarLane2Temp1=NorthCarLane2Temp1->ptrToNext;
					NorthCarLane2Temp1->ptrToBefore=NorthCarLane2Temp2;
					NorthCarLane2Temp1->ptrToNext=NULL;
					NorthCarLane2Temp2=NorthCarLane2Temp1;
					
					NorthCarLane2Temp1->x=-3*m_NorthLaneWidth/2;
					NorthCarLane2Temp1->y=60;
					NorthCarLane2Temp1->direction=4;
					NorthCarLane2Temp1->m_RoadID=4;
					NorthCarLane2Temp1->b_TurnRight=TRUE;
					
				}
				
			}
			
		}
		
	}
}





⌨️ 快捷键说明

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