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

📄 crosssimulation1view.cpp

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

	 //////////////////画车辆///////////////
	
	static CCar* pCurNodeEastLane1=NULL;
	if(CROSS)
	{
		pCurNodeEastLane1=CROSS->ptrToEastLane1;
	}

	while(pCurNodeEastLane1!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeEastLane1->p1.x, pCurNodeEastLane1->p1.y); 
		glVertex2f(pCurNodeEastLane1->p2.x, pCurNodeEastLane1->p2.y);
		glVertex2f(pCurNodeEastLane1->p3.x, pCurNodeEastLane1->p3.y);
		glVertex2f(pCurNodeEastLane1->p4.x, pCurNodeEastLane1->p4.y);
		glVertex2f(pCurNodeEastLane1->p2.x, pCurNodeEastLane1->p2.y);
		glEnd(); //结束绘制车辆

		pCurNodeEastLane1=pCurNodeEastLane1->ptrToNext;

	}

   static CCar* pCurNodeEastLane2=NULL;
	if(CROSS)
	{
		pCurNodeEastLane2=CROSS->ptrToEastLane2;
	}

	while(pCurNodeEastLane2!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeEastLane2->p1.x, pCurNodeEastLane2->p1.y); 
		glVertex2f(pCurNodeEastLane2->p2.x, pCurNodeEastLane2->p2.y);
		glVertex2f(pCurNodeEastLane2->p3.x, pCurNodeEastLane2->p3.y);
		glVertex2f(pCurNodeEastLane2->p4.x, pCurNodeEastLane2->p4.y);
		glVertex2f(pCurNodeEastLane2->p2.x, pCurNodeEastLane2->p2.y);
		glEnd(); //结束绘制车辆

		pCurNodeEastLane2=pCurNodeEastLane2->ptrToNext;

	}

	static CCar* pCurNodeWestLane1=NULL;
	if(CROSS)
	{
		pCurNodeWestLane1=CROSS->ptrToWestLane1;
	}
	
	while(pCurNodeWestLane1!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeWestLane1->p1.x, pCurNodeWestLane1->p1.y); 
		glVertex2f(pCurNodeWestLane1->p2.x, pCurNodeWestLane1->p2.y);
		glVertex2f(pCurNodeWestLane1->p3.x, pCurNodeWestLane1->p3.y);
		glVertex2f(pCurNodeWestLane1->p4.x, pCurNodeWestLane1->p4.y);
		glVertex2f(pCurNodeWestLane1->p2.x, pCurNodeWestLane1->p2.y);
		glEnd(); //结束绘制车辆
		
		pCurNodeWestLane1=pCurNodeWestLane1->ptrToNext;
		
	}
	
	static CCar* pCurNodeWestLane2=NULL;
	if(CROSS)
	{
		pCurNodeWestLane2=CROSS->ptrToWestLane2;
	}
	
	while(pCurNodeWestLane2!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeWestLane2->p1.x, pCurNodeWestLane2->p1.y); 
		glVertex2f(pCurNodeWestLane2->p2.x, pCurNodeWestLane2->p2.y);
		glVertex2f(pCurNodeWestLane2->p3.x, pCurNodeWestLane2->p3.y);
		glVertex2f(pCurNodeWestLane2->p4.x, pCurNodeWestLane2->p4.y);
		glVertex2f(pCurNodeWestLane2->p2.x, pCurNodeWestLane2->p2.y);
		glEnd(); //结束绘制车辆
		
		pCurNodeWestLane2=pCurNodeWestLane2->ptrToNext;
		
	}

	static CCar* pCurNodeSouthLane1=NULL;
	if(CROSS)
	{
		pCurNodeSouthLane1=CROSS->ptrToSouthLane1;
	}
	
	while(pCurNodeSouthLane1!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeSouthLane1->p1.x, pCurNodeSouthLane1->p1.y); 
		glVertex2f(pCurNodeSouthLane1->p2.x, pCurNodeSouthLane1->p2.y);
		glVertex2f(pCurNodeSouthLane1->p3.x, pCurNodeSouthLane1->p3.y);
		glVertex2f(pCurNodeSouthLane1->p4.x, pCurNodeSouthLane1->p4.y);
		glVertex2f(pCurNodeSouthLane1->p2.x, pCurNodeSouthLane1->p2.y);
		glEnd(); //结束绘制车辆
		
		pCurNodeSouthLane1=pCurNodeSouthLane1->ptrToNext;
		
	}
	
	static CCar* pCurNodeSouthLane2=NULL;
	if(CROSS)
	{
		pCurNodeSouthLane2=CROSS->ptrToSouthLane2;
	}
	
	while(pCurNodeSouthLane2!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeSouthLane2->p1.x, pCurNodeSouthLane2->p1.y); 
		glVertex2f(pCurNodeSouthLane2->p2.x, pCurNodeSouthLane2->p2.y);
		glVertex2f(pCurNodeSouthLane2->p3.x, pCurNodeSouthLane2->p3.y);
		glVertex2f(pCurNodeSouthLane2->p4.x, pCurNodeSouthLane2->p4.y);
		glVertex2f(pCurNodeSouthLane2->p2.x, pCurNodeSouthLane2->p2.y);
		glEnd(); //结束绘制车辆
		
		pCurNodeSouthLane2=pCurNodeSouthLane2->ptrToNext;
		
	}

	
	static CCar* pCurNodeNorthLane1=NULL;
	if(CROSS)
	{
		pCurNodeNorthLane1=CROSS->ptrToNorthLane1;
	}
	
	while(pCurNodeNorthLane1!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeNorthLane1->p1.x, pCurNodeNorthLane1->p1.y); 
		glVertex2f(pCurNodeNorthLane1->p2.x, pCurNodeNorthLane1->p2.y);
		glVertex2f(pCurNodeNorthLane1->p3.x, pCurNodeNorthLane1->p3.y);
		glVertex2f(pCurNodeNorthLane1->p4.x, pCurNodeNorthLane1->p4.y);
		glVertex2f(pCurNodeNorthLane1->p2.x, pCurNodeNorthLane1->p2.y);
		glEnd(); //结束绘制车辆
		
		pCurNodeNorthLane1=pCurNodeNorthLane1->ptrToNext;
		
	}
	
	static CCar* pCurNodeNorthLane2=NULL;
	if(CROSS)
	{
		pCurNodeNorthLane2=CROSS->ptrToNorthLane2;
	}
	
	while(pCurNodeNorthLane2!=NULL)
	{
		glBegin(GL_POLYGON); //开始绘制车辆
		glColor3d(0.0, 0.0, 0.8);
		glVertex2f(pCurNodeNorthLane2->p1.x, pCurNodeNorthLane2->p1.y); 
		glVertex2f(pCurNodeNorthLane2->p2.x, pCurNodeNorthLane2->p2.y);
		glVertex2f(pCurNodeNorthLane2->p3.x, pCurNodeNorthLane2->p3.y);
		glVertex2f(pCurNodeNorthLane2->p4.x, pCurNodeNorthLane2->p4.y);
		glVertex2f(pCurNodeNorthLane2->p2.x, pCurNodeNorthLane2->p2.y);
		glEnd(); //结束绘制车辆
		
		pCurNodeNorthLane2=pCurNodeNorthLane2->ptrToNext;
		
	}

	


	glFinish(); //	结束整个绘制	
	SwapBuffers(wglGetCurrentDC()); //	交换前后缓存

	glDrawBuffer(GL_FRONT);  //	绘制前景
		
	//if(simTime>=simEndTime) sim_start=3;
}
void CCrossSimulation1View::Simulation()
{
	///////////////产生车辆///////
	/////东西方向生成车辆/
	float      m_SouthLaneWidth=CROSS->m_SouthLaneWidth;
	float      m_EastLaneWidth=CROSS->m_EastLaneWidth;
	float      m_NorthLaneWidth=CROSS->m_NorthLaneWidth;
	float      m_WestLaneWidth=CROSS->m_WestLaneWidth;
	int        m_SouthLaneNumber=CROSS->m_SouthLaneNumber;
	int        m_NorthLaneNumber=CROSS->m_NorthLaneNumber;
	int        m_WestLaneNumber=CROSS->m_WestLaneNumber;
	int        m_EastLaneNumber=CROSS->m_EastLaneNumber;


/////////////产生车流////////////////////////// 
	
   CROSS->EastGenerateCar();   //东边路段产生车辆;
   CROSS->WestGenerateCar();   //西边路段产生车辆;
   CROSS->NorthGenerateCar();
   CROSS->SouthGenerateCar();


///////////////////车流运行////////////////////////

  static CCar* EastLane1Move=NULL;     
  EastLane1Move=CROSS->ptrToEastLane1;
  while(EastLane1Move!=NULL)
  {
	
	  if(EastLane1Move->b_TurnLeft&&(EastLane1Move->x)<(m_NorthLaneNumber/2*m_NorthLaneWidth+turnwide+EastLane1Move->m_CarLenth/2))
	  {
		  EastLane1Move->turnleft(m_NorthLaneNumber/2*m_NorthLaneWidth+turnwide,
			  m_EastLaneWidth-(m_EastLaneWidth-EastLane1Move->m_CarWidth)/2,
			  turnwide+(m_NorthLaneWidth-EastLane1Move->m_CarWidth)/2+2*m_NorthLaneWidth,
			  3.14/2);
	  }
	  else
	  {
		  EastLane1Move->move();
		  
	  }
	  
		EastLane1Move=EastLane1Move->ptrToNext;
  }

  static CCar* EastLane2Move=NULL;     
  EastLane2Move=CROSS->ptrToEastLane2;
  while(EastLane2Move!=NULL)
  {
	  
	  if(EastLane2Move->b_TurnRight&&(EastLane2Move->x)<(m_NorthLaneNumber/2*m_NorthLaneWidth+turnwide+EastLane2Move->m_CarLenth/2))
	  {
		  EastLane2Move->turnright(m_NorthLaneNumber/2*m_NorthLaneWidth+turnwide,
			  4*m_EastLaneWidth/2-(m_EastLaneWidth-EastLane2Move->m_CarWidth)/2,
			   turnwide+(m_NorthLaneWidth-EastLane2Move->m_CarWidth)/2,3.14/2); 
	  }
	  else
	  {
		  EastLane2Move->move();
		  
	  }
	  
	  EastLane2Move=EastLane2Move->ptrToNext;
  }

  static CCar* WestLane1Move=NULL;     
  WestLane1Move=CROSS->ptrToWestLane1;
  while(WestLane1Move!=NULL)
  {
	  
	  if(WestLane1Move->b_TurnLeft&&(WestLane1Move->x)>(-m_NorthLaneNumber/2*m_NorthLaneWidth-turnwide-WestLane1Move->m_CarLenth/2))
	  {
		  WestLane1Move->turnleft(-m_NorthLaneNumber/2*m_NorthLaneWidth-turnwide,
			  -m_EastLaneWidth+(m_EastLaneWidth-WestLane1Move->m_CarWidth)/2,
			  turnwide+(m_NorthLaneWidth-WestLane1Move->m_CarWidth)/2+2*m_NorthLaneWidth,3.14/2); 
	  }
	  else
	  {
		  WestLane1Move->move();
		  
	  }
	  
	  WestLane1Move=WestLane1Move->ptrToNext;
  }

   
  static CCar* WestLane2Move=NULL;     
  WestLane2Move=CROSS->ptrToWestLane2;
  while(WestLane2Move!=NULL)
  {
	  
	  if(WestLane2Move->b_TurnRight&&(WestLane2Move->x)>(-m_NorthLaneNumber/2*m_NorthLaneWidth-turnwide-WestLane2Move->m_CarLenth/2))
	  {
		  WestLane2Move->turnright(-m_NorthLaneNumber/2*m_NorthLaneWidth-turnwide,
			  -4*m_EastLaneWidth/2+(m_EastLaneWidth-WestLane2Move->m_CarWidth)/2,
			  turnwide+(m_NorthLaneWidth-WestLane2Move->m_CarWidth)/2,3.14/2); 
	  }
	  else
	  {
		  WestLane2Move->move();
		  
	  }
	  
	  WestLane2Move=WestLane2Move->ptrToNext;
  }

  static CCar* SouthLane1Move=NULL;     
  SouthLane1Move=CROSS->ptrToSouthLane1;
  while(SouthLane1Move!=NULL)
  {
	  
	  if(SouthLane1Move->b_TurnLeft&&(SouthLane1Move->x)<(m_NorthLaneNumber/1*m_NorthLaneWidth+turnwide+SouthLane1Move->m_CarLenth/1))
	  {
		  SouthLane1Move->turnleft(m_NorthLaneNumber/1*m_NorthLaneWidth+turnwide,
			  4*m_EastLaneWidth/1-(m_EastLaneWidth-SouthLane1Move->m_CarWidth)/1,
			  turnwide+(m_NorthLaneWidth-SouthLane1Move->m_CarWidth)/1,3.14/1); 
	  }
	  else
	  {
		  SouthLane1Move->move();
		  
	  }
	  
	  SouthLane1Move=SouthLane1Move->ptrToNext;
  }

  static CCar* SouthLane2Move=NULL;     
  SouthLane2Move=CROSS->ptrToSouthLane2;
  while(SouthLane2Move!=NULL)
  {
	  
	  if(SouthLane2Move->b_TurnRight&&(SouthLane2Move->y)>(-m_EastLaneNumber/2*m_EastLaneWidth-turnwide-SouthLane2Move->m_CarLenth/2))
	  {
		
		  SouthLane2Move->turnright(SouthLane2Move->x+SouthLane2Move->m_CarWidth/2,
			  SouthLane2Move->y+SouthLane2Move->m_CarLenth/2,
			  turnwide+(m_SouthLaneWidth-SouthLane2Move->m_CarWidth)/2,3.14/2); 
	  }
	  else
	  {
		  SouthLane2Move->move();
		  
	  }
	  
	  SouthLane2Move=SouthLane2Move->ptrToNext;
  }

  static CCar* NorthLane1Move=NULL;     
  NorthLane1Move=CROSS->ptrToNorthLane1;
  while(NorthLane1Move!=NULL)
  {
	  
	  if(NorthLane1Move->b_TurnLeft&&(NorthLane1Move->x)<(m_NorthLaneNumber/1*m_NorthLaneWidth+turnwide+NorthLane1Move->m_CarLenth/1))
	  {
		  NorthLane1Move->turnleft(m_NorthLaneNumber/1*m_NorthLaneWidth+turnwide,
			  4*m_EastLaneWidth/1-(m_EastLaneWidth-NorthLane1Move->m_CarWidth)/1,
			  turnwide+(m_NorthLaneWidth-NorthLane1Move->m_CarWidth)/1,3.14/1); 
	  }
	  else
	  {
		  NorthLane1Move->move();
		  
	  }
	  
	  NorthLane1Move=NorthLane1Move->ptrToNext;
  }

  static CCar* NorthLane2Move=NULL;     
  NorthLane2Move=CROSS->ptrToNorthLane2;
  while(NorthLane2Move!=NULL)
  {
	  
	  if(NorthLane2Move->b_TurnRight&&(NorthLane2Move->x)<(m_NorthLaneNumber/2*m_NorthLaneWidth+turnwide+NorthLane2Move->m_CarLenth/2))
	  {
		  NorthLane2Move->turnright(m_NorthLaneNumber/2*m_NorthLaneWidth+turnwide,
			  4*m_EastLaneWidth/2-(m_EastLaneWidth-NorthLane2Move->m_CarWidth)/2,
			  turnwide+(m_NorthLaneWidth-NorthLane2Move->m_CarWidth)/2,3.24/2); 
	  }
	  else
	  {
		  NorthLane2Move->move();
		  
	  }
	  
	  NorthLane2Move=NorthLane2Move->ptrToNext;
  }



	 




}


void CCrossSimulation1View::OnCrossNor() 
{
	// TODO: Add your command handler code here
	CCrossSetDlg dlg;
	if(dlg.DoModal()==IDOK)
	{

		CROSS=new CRoad;

		
		CROSS->m_EastLaneNumber=dlg.m_EastLaneNumber;
		CROSS->m_WestLaneNumber=dlg.m_WestLaneNumber;
		CROSS->m_SouthLaneNumber=dlg.m_SouthLaneNumber;
		CROSS->m_NorthLaneNumber=dlg.m_NorthLaneNumber;
		
		CROSS->m_EastLaneWidth=dlg.m_EastLaneWidth;
		CROSS->m_WestLaneWidth=dlg.m_WestLaneWidth;
		CROSS->m_SouthLaneWidth=dlg.m_SouthLaneWidth;
		CROSS->m_NorthLaneWidth=dlg.m_NorthLaneWidth;


		CROSS->m_EastLaneTraffic=dlg.m_EastLaneTraffic;
		CROSS->m_WestLaneTraffic=dlg.m_WestLaneTraffic;
		CROSS->m_SouthLaneTraffic=dlg.m_SouthLaneTraffic;
		CROSS->m_NorthLaneTraffic=dlg.m_NorthLaneTraffic;
	
        
		b_DrawCross=true;

		Invalidate();
	}
}

void CCrossSimulation1View::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(b_DrawCross)
	{
	   Simulation();
	   Invalidate();
	}

	CView::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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