当前位置: 首页 > news >正文

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

相关文章:

  • 数学的雨伞下:理解世界的乐趣
  • openEuler2203 LTS安装并远程桌面接VMware WorkStation Pro 17
  • 找座位 - 华为OD统一考试(C卷)
  • 虽迟但到,Postman终于支持Websocket接口了
  • 备战蓝桥杯 Day8(最长上升子序列LIS模型)
  • 第六章:纹理贴图
  • 认识K8S
  • Job 和 DaemonSet
  • Promise
  • SpringBoot+WebSocket实现即时通讯(四)
  • 二.自定义头文件
  • HTTP的详细介绍
  • 3、windows环境下vscode开发c/c++环境配置(二)
  • 通过Docker Compose的方式在Docker中安装Maven环境
  • 配置基于 AWS CRT 的 HTTP 客户端
  • git常用命令
  • mysql mgr集群部署
  • 从 git 分支中合并特定文件,而不是整个分支的内容
  • MinIO 和 Apache Tika:文本提取模式
  • 加固平板电脑在无人机的应用|亿道三防onerugged
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作
  • 五一假期上海推出首批16条“市民健康路线”,这些健康提示请收好
  • 文化润疆|让新疆青少年成为“小小博物家”
  • 特朗普声称中方领导人打了电话,外交部:近期中美元首没有通话
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞
  • 人民时评:投资于人,促高质量充分就业