📄 car.cpp
字号:
// Car.cpp: implementation of the CCar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CrossSimulation1.h"
#include "Car.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCar::CCar()
{
m_CarWidth=1.8;
m_CarLenth=4.0;
m_speed=60/3.6/100;
b_TurnLeft=FALSE;
b_TurnRight=FALSE;
angle=0;
}
CCar::~CCar()
{
}
void CCar::move() //车辆行驶方向;1为向西;2为向东;3为向北;4为向南;
{
if(direction==1) //向西行驶;
{
x=x-m_speed;
changetopoint();
}
if(direction==2) //向东行驶;
{
x=x+m_speed;
changetopoint();
}
if(direction==3) //向北行驶;
{
y=y+m_speed;
p1.x=x+m_CarWidth/2;
p1.y=y+m_CarLenth/2;
p2.x=x+m_CarWidth/2;
p2.y=y-m_CarLenth/2;
p3.x=x-m_CarWidth/2;
p3.y=y-m_CarLenth/2;
p4.x=x-m_CarWidth/2;
p4.y=y+m_CarLenth/2;
}
if(direction==4) //向南行驶;
{
y=y-m_speed;
p1.x=x-m_CarWidth/2;
p1.y=y-m_CarLenth/2;
p2.x=x-m_CarWidth/2;
p2.y=y+m_CarLenth/2;
p3.x=x+m_CarWidth/2;
p3.y=y+m_CarLenth/2;
p4.x=x+m_CarWidth/2;
p4.y=y-m_CarLenth/2;
}
}
void CCar::changetopoint()
{
p1.x=x-m_CarLenth/2;
p1.y=y+m_CarWidth/2;
p2.x=x+m_CarLenth/2;
p2.y=y+m_CarWidth/2;
p3.x=x+m_CarLenth/2;
p3.y=y-m_CarWidth/2;
p4.x=x-m_CarLenth/2;
p4.y=y-m_CarWidth/2;
}
void CCar::gostrait()
{
if(m_RoadID==1)
{
m_RoadID=2;
}
if(m_RoadID==2)
{
m_RoadID==1;
}
if(m_RoadID==3)
{
m_RoadID=4;
}
if(m_RoadID==4)
{
m_RoadID=3;
}
if(direction==1) //向西行驶;
{
x=x-m_speed;
}
if(direction==2) //向东行驶;
{
x=x+m_speed;
}
if(direction==3) //向北行驶;
{
y=y+m_speed;
}
if(direction==4) //向南行驶;
{
y=y-m_speed;
}
}
void CCar::turnleft(float x,float y,float r,float l)
{
point t1,t4;
t1.x=x;
t1.y=y;
if(m_RoadID==1)
{
t4.x=x;
t4.y=y-m_CarWidth;
p4.x=t4.x-r*sin(angle);
p4.y=t4.y-r*(1-cos(angle));
p1.x=t1.x-(r+m_CarWidth)*sin(angle);
p1.y=t1.y-(r+m_CarWidth)*(1-cos(angle));
/////懒惰的发现,把负号改为正号
p2.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p1.x;
p2.y=(p1.x-p4.x)*(p1.x-p2.x)/(p1.y-p4.y)+p1.y;
p3.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p4.x;
p3.y=(p1.x-p4.x)*(p4.x-p3.x)/(p1.y-p4.y)+p4.y;
angle+=m_speed/r;
if(angle>=l)
{
b_TurnLeft=FALSE;
m_RoadID=3;
direction=4;
this->x=(p4.x-p1.x)/2+p1.x;
this->y=(p2.y-p1.y)/2+p1.y;
}
}
if(m_RoadID==2)
{
t4.x=x;
t4.y=y+m_CarWidth;
p4.x=t4.x+r*sin(angle);
p4.y=t4.y+r*(1-cos(angle));
p1.x=t1.x+(r+m_CarWidth)*sin(angle);
p1.y=t1.y+(r+m_CarWidth)*(1-cos(angle));
/////懒惰的发现,把负号改为正号
p2.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p1.x;
p2.y=(p1.x-p4.x)*(p1.x-p2.x)/(p1.y-p4.y)+p1.y;
p3.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p4.x;
p3.y=(p1.x-p4.x)*(p4.x-p3.x)/(p1.y-p4.y)+p4.y;
angle+=m_speed/r;
if(angle>=l)
{
b_TurnLeft=FALSE;
m_RoadID=4;
direction=3;
this->x=(p1.x-p4.x)/2+p4.x;
this->y=(p1.y-p2.y)/2+p2.y;
}
}
}
void CCar::turnright(float x,float y,float r,float l) //车辆所在的路段编号;1为东,2为西向路段,3为南,4为北向路段
//车辆行驶方向;1为向西;2为向东;3为向北;4为向南;
{
//改变方向;
point t1,t4;
t1.x=x;
t1.y=y;
if(m_RoadID==1&&direction==1) ///为东向车流;
{
t4.x=x;
t4.y=y-m_CarWidth;
p1.x=t1.x-r*sin(angle);
p1.y=t1.y+r*(1-cos(angle));
p4.x=t4.x-(r+m_CarWidth)*sin(angle);
p4.y=t4.y+(r+m_CarWidth)*(1-cos(angle));
/////懒惰的发现,把负号改为正号
p2.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p1.x;
p2.y=(p1.x-p4.x)*(p1.x-p2.x)/(p1.y-p4.y)+p1.y;
p3.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p4.x;
p3.y=(p1.x-p4.x)*(p4.x-p3.x)/(p1.y-p4.y)+p4.y;
angle+=m_speed/r;
if(angle>=l)
{
b_TurnRight=FALSE;
m_RoadID=4;
direction=3;
this->x=(p1.x-p4.x)/2+p4.x;
this->y=(p1.y-p2.y)/2+p2.y;
}
}
if(m_RoadID==2&&direction==2) //为西向车流;
{
t4.x=x;
t4.y=y+m_CarWidth;
p1.x=t1.x+r*sin(angle);
p1.y=t1.y-r*(1-cos(angle));
p4.x=t4.x+(r+m_CarWidth)*sin(angle);
p4.y=t4.y-(r+m_CarWidth)*(1-cos(angle));
/////懒惰的发现,把负号改为正号
p2.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p1.x;
p2.y=(p1.x-p4.x)*(p1.x-p2.x)/(p1.y-p4.y)+p1.y;
p3.x=m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p4.x;
p3.y=(p1.x-p4.x)*(p4.x-p3.x)/(p1.y-p4.y)+p4.y;
angle+=m_speed/r;
if(angle>=l)
{
b_TurnRight=FALSE;
m_RoadID=3;
direction=4;
this->x=(p4.x-p1.x)/2+p1.x;
this->y=(p2.y-p1.y)/2+p1.y;
}
}
if(m_RoadID==3&&direction==3) //为南向车流;
{
t4.x=x-m_CarWidth;
t4.y=y;
p1.x=t1.x+r*(1-cos(angle));
p1.y=t1.y+r*sin(angle);
p4.x=t4.x+(r+m_CarWidth)*(1-cos(angle));
p4.y=t4.y+(r+m_CarWidth)*sin(angle);
/////懒惰的发现,把负号改为正号
p2.x=-m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p1.x;
p2.y=(p1.x-p4.x)*(p1.x-p2.x)/(p1.y-p4.y)+p1.y;
p3.x=-m_CarLenth*(p1.y-p4.y)/sqrt((p1.y-p4.y)*(p1.y-p4.y)+(p1.x-p4.x)*(p1.x-p4.x))+p4.x;
p3.y=(p1.x-p4.x)*(p4.x-p3.x)/(p1.y-p4.y)+p4.y;
angle+=m_speed/r;
if(angle>=l)
{
b_TurnRight=FALSE;
m_RoadID=1;
direction=2;
this->x=(p1.x-p2.x)/2+p2.x;
this->y=(p4.y-p1.y)/2+p1.y;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -