当前位置: 首页>>代码示例>>C++>>正文


C++ Vector2D::setLength方法代码示例

本文整理汇总了C++中Vector2D::setLength方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector2D::setLength方法的具体用法?C++ Vector2D::setLength怎么用?C++ Vector2D::setLength使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Vector2D的用法示例。


在下文中一共展示了Vector2D::setLength方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

/* ---------------------------------------------------------------------- */
Vector2D Circle2D::nearestpoint(Vector2D pnt)
{

        Vector2D diff = pnt - this->center();
        diff.setLength(this->radius());
        Vector2D dest=this->center()+diff;
        return dest;

}
开发者ID:MrKarimiD,项目名称:Merge,代码行数:10,代码来源:circle_2d.cpp

示例2: AdjustKickPoint

Position Knowledge::AdjustKickPoint(Vector2D ballPos, Vector2D target, int kickSpeed)
{
    Position p;
    Vector2D dir = (ballPos - target);//.normalizedVector();
    dir.setLength(/*scale(*/ROBOT_RADIUS - (35 /*- kickSpeed*/));

    p.loc = ballPos + dir;
    p.dir = (-dir).dir().radian();

    return p;
}
开发者ID:MrKarimiD,项目名称:kn2cPrograms,代码行数:11,代码来源:knowledge.cpp

示例3:

        // =================================================================================
        Vector2D TacticPush2Goal::GoOncircle(Vector2D center, double radius)//, Vector2D Object)
        {
            //for (int k=0;k<1000;k++)

            Vector2D diff = wm->ourRobot[id].pos.loc - center;
            diff.setDir(diff.dir()+1.1);//50);//.radian() + AngleDeg::deg2rad(5));
            diff.setLength(radius);
            Vector2D point = center + diff;
            return point;

        }
开发者ID:kn2cssl,项目名称:Sharif-Cup-2015-,代码行数:12,代码来源:tacticpush2goal.cpp

示例4: execute

bool SkillCircle::execute(RobotCommand &rc)
{
    if(_rid==-1) return false;
    Vector2D vc;
    vc = _wm->ourRobot[_rid].pos.loc;
    vc.setLength(500);
    vc.rotate(10);
    rc.FinalPos.loc=vc;
    rc.TargetPos.loc=vc;
    rc.FinalPos.dir=(_wm->ball.pos.loc - _wm->ourRobot[_rid].pos.loc).dir().radian();
    rc.TargetPos.dir=(_wm->ball.pos.loc - _wm->ourRobot[_rid].pos.loc).dir().radian();
    rc.Speed=1;
    return true;
}
开发者ID:abaei,项目名称:KN2C-SSL,代码行数:14,代码来源:skillcircle.cpp

示例5: target_point

/*!

 */
bool
Bhv_SetPlayGoalKick::doKickToFarSide( PlayerAgent * agent )
{
    const WorldModel & wm = agent->world();

    Vector2D target_point( ServerParam::i().ourPenaltyAreaLineX() - 5.0,
                           ServerParam::i().penaltyAreaHalfWidth() );
    if ( wm.ball().pos().y > 0.0 )
    {
        target_point.y *= -1.0;
    }

    double ball_move_dist = wm.ball().pos().dist( target_point );
    double ball_first_speed = calc_first_term_geom_series_last( 0.7,
                                                                ball_move_dist,
                                                                ServerParam::i().ballDecay() );
    ball_first_speed = std::min( ServerParam::i().ballSpeedMax(),
                                 ball_first_speed );
    ball_first_speed = std::min( wm.self().kickRate() * ServerParam::i().maxPower(),
                                 ball_first_speed );

    Vector2D accel = target_point - wm.ball().pos();
    accel.setLength( ball_first_speed );

    double kick_power = std::min( ServerParam::i().maxPower(),
                                  accel.r() / wm.self().kickRate() );
    AngleDeg kick_angle = accel.th();


    dlog.addText( Logger::TEAM,
                  __FILE__" (doKickToFarSide) target=(%.2f %.2f) dist=%.3f ball_speed=%.3f",
                  target_point.x, target_point.y,
                  ball_move_dist,
                  ball_first_speed );
    dlog.addText( Logger::TEAM,
                  __FILE__" (doKickToFarSide) kick_power=%f kick_angle=%.1f",
                  kick_power,
                  kick_angle.degree() );

    agent->doKick( kick_power, kick_angle - wm.self().body() );

    agent->setNeckAction( new Neck_ScanField() );
    return true;
}
开发者ID:4SkyNet,项目名称:HFO,代码行数:47,代码来源:bhv_set_play_goal_kick.cpp

示例6: affect

        void SimpleBirdController::affect(float ms)
        {
            Entity *entity = getEntity();
            if(currentPoint >= 0) {
                Vector2D position = entity->getPosition();
                Vector2D target = points[currentPoint];
                Vector2D velocity = target - position;
                velocity.setLength(entity->getSpeed());
                Vector2D destination = position + velocity * ms;

                /* We cross the target. */
                if(destination.getDistance(target) >
                        position.getDistance(target) ||
                        position.getDistance(target) < 0.00001f)
                    currentPoint = (currentPoint + 1) % points.size();

                entity->setVelocity(velocity);
            }
        }
开发者ID:ELMERzark,项目名称:JVGS,代码行数:19,代码来源:SimpleBirdController.cpp

示例7: AdjustKickPointB

OperatingPosition Knowledge::AdjustKickPointB(Vector2D ballLoc, Vector2D target, Position robotPos)
{
    OperatingPosition KickPos;
    Vector2D KickDir = (target - ballLoc);
    bool shoot_sensor = true;
    double DirErr;
    double DistErr;
    double BallDir = _wm->ball.vel.loc.dir().radian();
    double DAngel = AngleDeg ::deg2rad(80);

    if(_wm->ball.vel.loc.length()>.2 && (-KickDir.dir().radian()-DAngel)<BallDir && (-KickDir.dir().radian()+DAngel)>BallDir)
    {
        KickPos.pos.dir = BallDir-M_PI;
        if (KickPos.pos.dir > M_PI) KickPos.pos.dir -= 2 * M_PI;
        if (KickPos.pos.dir < -M_PI) KickPos.pos.dir += 2 * M_PI;

        KickPos.pos.loc = ballLoc ;
    }
    else
    {
        //possession point >>navigation : ON
        KickDir.setLength( ROBOT_RADIUS + BALL_RADIUS*2);
        KickPos.useNav = true ;

        KickPos.pos.dir = KickDir.dir().radian();
        KickPos.pos.loc = ballLoc - KickDir;

        //possession point check
        DirErr = AngleDeg::rad2deg(fabs(KickPos.pos.dir  - robotPos.dir));
        if(DirErr > 360.0)  DirErr = 360.0 - DirErr ;

        DistErr = (KickPos.pos.loc - robotPos.loc).length();
        if(DirErr < 15 && DistErr < BALL_RADIUS*2) kickPermission = true;
        if(DirErr > 19 && DistErr > BALL_RADIUS*3) kickPermission = false;

    }

    if(kickPermission)
    {
        Vector2D ball_vel_change;

        ball_vel_change =_wm->ball.vel.loc - last_ball_vell;
        last_ball_vell = _wm->ball.vel.loc ;

        if(ball_vel_change.length()>0.02)
            shoot_sensor = false;

        //control point >>navigation : OFF
        KickDir.setLength( ROBOT_RADIUS- BALL_RADIUS);
        KickPos.useNav = false ;
        KickPos.pos.dir = KickDir.dir().radian();//(ballLoc - robotPos.loc).dir().radian();//
        KickPos.pos.loc = ballLoc - KickDir;

        DirErr = AngleDeg::rad2deg(fabs(KickPos.pos.dir  - robotPos.dir));
        if(DirErr > 360.0)  DirErr = 360.0 - DirErr ;

        DistErr = (KickPos.pos.loc - robotPos.loc).length();
        //qDebug()<<"A"<<DirErr<<DistErr<<ball_vel_change.length();

        //#kick distance and angel limits
        if(shoot_sensor)//kicking limits when shooting with sensor
        {

        }
        else//kicking limits when shooting without sensor
        {
            if(DirErr < 10 && DistErr < 45)
            {
                KickPos.readyToShoot = true;
                qDebug()<<"shooooooooooooooooooooooooooooooooooooooot";
            }
            else
            {
                KickPos.readyToShoot = false;
            }

        }
        //##kick distance and angel limits
    }

    return KickPos;
}
开发者ID:mohsen-raoufi,项目名称:Guidance,代码行数:82,代码来源:knowledge.cpp

示例8: c

RobotCommand TacticPush2Goal::getCommand()
{
    oppIsValid = wm->ourRobot[0].isValid;//wm->theirRobot.IsValid;// opposite robot
    addData();

    sortData();
    if(!oppIsValid) opp = Vector2D(1000000,1000000);
    opp = wm->ourRobot[0].pos.loc;//wm->theirRobot.position;//wm->ourRobot[8].pos.loc;
    OppIsKhoraak=!circularBorder2.contains(opp);//out of his field
    bool reach=false;
    Avoided=false;
    AllIn=true;
    AnyIn=false;
    AllInCorner=true;
    AllUnAccessible=true;

    RobotCommand rc;
    if(!wm->ourRobot[id].isValid) return rc;
    rc.fin_pos.loc=Vector2D(400,0);//circularBorder.center();
    rc.maxSpeed = 1.2;


    index=-1;
    int tah=balls.size()-1;
    if(tah != -1)
    {
        rc.fin_pos.loc=circularBorder2.nearestpoint(balls.at(tah)->pos.loc);
        rc.fin_pos.dir=(circularBorder.center()-rc.fin_pos.loc).dir().radian();
    }


    FindBall(); // find approtiate ball

    if( index != -1 )
    {
        point2 = balls.at(index)->pos.loc;

        FindHole();

        Vector2D nrstpnt = (circularBorder.center()-point2); //nearest Point
        nrstpnt=nrstpnt.setLength(nrstpnt.length()-circularBorder2.radius());
        diff2 = nrstpnt;
        nrstpnt=point2+nrstpnt;
        //        state2=0;
        switch(state)
        {
        case 0:{ //Go Behind the Object

            vec2goal.setLength(250);
            // qDebug()<<"VEC 2 GOAL LENGTH = " << vec2goal.length();
            rc.maxSpeed=1.3;
            rc.useNav = false;//true;
            rc.isBallObs = false;//true;
            rc.isKickObs = false;//true;
            rc.fin_pos.loc=wm->kn->PredictDestination(wm->ourRobot[id].pos.loc,point2  - vec2goal,
                                                      rc.maxSpeed,balls.at(index)->vel.loc);//point2  - vec2goal;
            //            wm->kn->PredictDestination()
            int rad = 150+ROBOT_RADIUS;
            Circle2D c(point2,rad);

            rc.fin_pos.loc=AvoidtoEnterCircle(c,wm->ourRobot[id].pos.loc,rc.fin_pos.loc);
            //            if(Avoided) rc.maxSpeed=rc.maxSpeed;
            rc.fin_pos.dir=vec2goal.dir().radian();
//            KeepInField(rc);
            reach=wm->kn->ReachedToPos(wm->ourRobot[id].pos.loc,rc.fin_pos.loc,100);
            if(reach && !Avoided) state = 1;

        }
            break;
        case 1:{//Push

            rc.useNav = false;
            rc.isBallObs = false;
            rc.isKickObs = false;
            rc.maxSpeed=1.1;
            vec2goal.setLength(100);
            rc.fin_pos.loc=wm->kn->PredictDestination(wm->ourRobot[id].pos.loc,point2  + vec2goal,
                                                      rc.maxSpeed,balls.at(index)->vel.loc);
            rc.fin_pos.dir=vec2goal.dir().radian();

            KeepInField(rc);
            if(((wm->ourRobot[id].pos.loc-point2).length())>800) state=0;
            if(((wm->ourRobot[id].pos.loc-rc.fin_pos.loc).length())<250) state=0;


            if(hole1.contains(rc.fin_pos.loc) || hole2.contains(rc.fin_pos.loc))
            {
                //                vec2goal.setLength(100);
                rc.fin_pos.loc=point2  ;//+ vec2goal;
                //                rc.fin_pos.loc=point2;
            }

            //            reach=wm->kn->ReachedToPos(wm->ourRobot[id].pos.loc,rc.fin_pos.loc,40);
            //            if(reach)
            //                state2 = 0;
        }
            break;
        }
        int mrgn=200;
        Vector2D dlta;
//.........这里部分代码省略.........
开发者ID:kn2cssl,项目名称:Sharif-Cup-2015-,代码行数:101,代码来源:tacticpush2goal.cpp


注:本文中的Vector2D::setLength方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。