内部交流草稿纸

具体场景内部Lane之间关系的建立

这一部分工作在距离场景的构造函数中初始化Lane的部分进行,下面以Straight为例说明:

Straight::Straight(QPointF  globalPos,  //相对原点
                   int      num_laneR,  //右侧车道数
                   int      num_laneL,  //左侧车道数
                   double   len_lane,   //车道长度
                   double   wid_lane,   //车道宽
                   double   dir,        //场景方向初始化为0
                   double   scale)      //比例尺
{
    SceneType   = Scene::Straight;
    GlobalPos   = globalPos;
    Num_laneR   = num_laneR;
    Num_laneL   = num_laneL;
    Len_lane    = len_lane;
    Wid_lane    = wid_lane;
    Dir         = dir;
    Scale       = scale;

    //初始化Interface和Lanes
    QMatrix matrix;         //变换矩阵
    matrix.rotate(-Dir);    //顺时针旋转-Dir°
    Interfaces<<new Interface(QPointF(GlobalPos+QPointF(-Len_lane/2,0)*matrix), Num_laneR , Num_laneL , Dir)
             <<new Interface(QPointF(GlobalPos+QPointF(Len_lane/2,0)*matrix), Num_laneL , Num_laneR , Dir+180);//>360 ? Dir-180 : Dir
          
    /****************************从此处开始********************************/             
    
    //计算出lane的参数,初始化lane
    int num_lanes = Num_laneL+Num_laneR;
    double x0 = -Len_lane/2;
    double y0 = -(Wid_lane*num_lanes/2 - Wid_lane/2);
    QPointF startPoint;
    QPointF endPoint;
    for(int i=0; i<Num_laneL; ++i){
        startPoint = QPointF(GlobalPos+QPointF(x0+Len_lane,y0+i*Wid_lane)*matrix);
        endPoint = QPointF(GlobalPos+QPointF(x0,y0+i*Wid_lane)*matrix);
        Interfaces.at(0)->Lanes<<new Lane(startPoint,endPoint);
    }
    double y = y0 + Wid_lane*Num_laneL;
    for(int i=0; i<Num_laneR; ++i){
        startPoint = QPointF(GlobalPos+QPointF(x0,y+i*Wid_lane)*matrix);
        endPoint = QPointF(GlobalPos+QPointF(x0+Len_lane,y+i*Wid_lane)*matrix);
        Interfaces.at(0)->Lanes<<new Lane(startPoint,endPoint);
    }
    for(int i=Interfaces.at(0)->Lanes.size()-1; i>=0; --i){
        Interfaces.at(1)->Lanes<<Interfaces.at(0)->Lanes.at(i);
    }
    //qDebug()<<"初始车道点:"<<Interfaces.at(0)->Lanes.at(0)->StartPoint<<Interfaces.at(0)->Lanes.at(0)->EndPoint;

    /****************************到此处结束********************************/       

}

场景之间Interface吸附时Lane之间关系的建立

这一部分工作在Scene类中的searchInterface(Interface* p)函数终进行:

QPointF Scene::searchInterface(Interface* p)
{
    for(int i = 0; i < Interfaces.size(); ++i){
        if((Interfaces.at(i)->FlagPoint - p->FlagPoint).manhattanLength() < 3 &&
                (Interfaces.at(i)->FlagPoint - p->FlagPoint).manhattanLength() > 1e-10 &&
                Interfaces.at(i)->Num_lanesGo   == p->Num_lanesBack &&
                Interfaces.at(i)->Num_lanesBack == p->Num_lanesGo   &&
                abs(Interfaces.at(i)->Dir - p->Dir) == 180)
        {
             /****************************从此处开始********************************/       


             /****************************到此处结束********************************/       
            return Interfaces.at(i)->FlagPoint - p->FlagPoint;
        }
    }
    return QPoint(-99,-99);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值