📄 crosssimulation1view.cpp
字号:
//////////////////画车辆///////////////
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 + -