主页 > 创业  > 

qt-交通路口仿真


qt-交通路口仿真 一、演示效果二、核心代码三、程序链接


一、演示效果

二、核心代码 #include "generator.h" Generator::Generator(SimulationScene *scene) :m_scene(scene) ,m_mode(VEHICLEMETHOD::GO_THROUGH) ,m_running_state(false) ,m_VisionOn(false) ,m_IsInteraction(true) { for(int i = 0 ; i < 4 ; ++i){ m_timer.append( new QTimer()); } this->connect(m_timer.at(0),SIGNAL(timeout()),this,SLOT(makeEastWest())); this->connect(m_timer.at(1),SIGNAL(timeout()),this,SLOT(makeNorthSouth())); this->connect(m_timer.at(2),SIGNAL(timeout()),this,SLOT(makeSouthNorth())); this->connect(m_timer.at(3),SIGNAL(timeout()),this,SLOT(makeWestEast())); //qsrand(static_cast<uint>(QTime(0,0,0).secsTo(QTime::currentTime()))); } Generator::Generator() :m_number_N_S(0) ,m_number_S_N(0) ,m_number_W_E(0) ,m_number_E_W(0) ,m_time_N_S(0) ,m_time_S_N(0) ,m_time_W_E(0) ,m_time_E_W(0) ,m_mode(VEHICLEMETHOD::GO_THROUGH) ,m_running_state(false) { for(int i = 0 ; i < 4 ; ++i){ m_timer.append( new QTimer()); } //qsrand(static_cast<uint>(QTime(0,0,0).secsTo(QTime::currentTime()))); } Generator::~Generator() { delete m_timer.at(0); delete m_timer.at(1); delete m_timer.at(2); delete m_timer.at(3); } void Generator::setMethod(const GENMETHOD& x) { m_method = x; } void Generator::startGenerator() { m_timer.at(0)->start(m_time_E_W); m_timer.at(1)->start(m_time_N_S); m_timer.at(2)->start(m_time_S_N); m_timer.at(3)->start(m_time_W_E); } void Generator::stopGenerator() { m_timer.at(0)->stop(); m_timer.at(1)->stop(); m_timer.at(2)->stop(); m_timer.at(3)->stop(); } void Generator::startAutoGeneraion() { setTimer(2500,2000,2600,3000); startGenerator(); } void Generator::setTimer(const int& N_S,const int& S_N,const int& E_W,const int& W_E) { m_time_N_S = N_S; m_time_S_N = S_N; m_time_E_W = E_W; m_time_W_E = W_E; } void Generator::makeNorthSouth() { if(m_scene->getNumber(REGION_N_S) > MAX_N_S){ return; } //qDebug()<<"Hello"; switch (m_method) { case GEN_3: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; } break; case GEN_5: switch (qrand()%5){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 3: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 4: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; } break; case NO_TURN: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; } break; case ONLY_TURN: switch (qrand()%2) { case 0: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction)); break; case 1: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction)); break; } break; } } void Generator::makeSouthNorth() { if(m_scene->getNumber(REGION_S_N) > MAX_S_N){ return; } //qDebug()<<"Hello"; switch (m_method) { case GEN_3: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; } break; case GEN_5: switch (qrand()%5){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; case 3: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; case 4: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction)); //m_number_S_N++; break; } break; case NO_TURN: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; } break; case ONLY_TURN: switch (qrand()%2) { case 0: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction)); break; case 1: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction)); break; } break; } } void Generator::makeWestEast() { if(m_scene->getNumber(REGION_W_E) > MAX_W_E){ return; } //qDebug()<<"Hello"; switch (m_method) { case GEN_3: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; } break; case GEN_5: switch (qrand()%5){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; case 3: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; case 4: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction)); //m_number_W_E++; break; } break; case NO_TURN: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; } break; case ONLY_TURN: switch (qrand()%2) { case 0: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction)); break; case 1: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction)); break; } break; } } void Generator::makeEastWest() { if(m_scene->getNumber(REGION_E_W) > MAX_E_W){ return; } //qDebug()<<"Hello"; switch (m_method) { case GEN_3: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; } break; case GEN_5: switch (qrand()%5){ case 0: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; case 3: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; case 4: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction)); //m_number_E_W++; break; } break; case NO_TURN: switch (qrand()%3){ case 0: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,1,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 1: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,2,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; case 2: m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,3,m_mode,m_VisionOn,m_IsInteraction)); //m_number_N_S++; break; } break; case ONLY_TURN: switch (qrand()%2) { case 0: m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction)); break; case 1: m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction)); break; } break; } } void Generator::setMode(const VEHICLEMETHOD &mode) { m_mode = mode; } void Generator::setVisionOn(const bool &vision) { m_VisionOn = vision; } void Generator::setInteraction(const bool &interact) { m_IsInteraction = interact; } void Generator::setScene(SimulationScene *scene) { m_scene = scene; } void Generator::turnOn() { m_running_state = true; } void Generator::turnOff() { m_running_state = false; } 三、程序链接

https://download.csdn.net/download/u013083044/88850953

标签:

qt-交通路口仿真由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“qt-交通路口仿真