本文整理汇总了C++中Vector2D::mag方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector2D::mag方法的具体用法?C++ Vector2D::mag怎么用?C++ Vector2D::mag使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector2D
的用法示例。
在下文中一共展示了Vector2D::mag方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
GoToPoint::call()
{
double dis_to_point;
double dir_to_point;
Vector2D agent_p = m_world->me().pos;
double ang_permisible;
double turn_parameter;
Vector2D velocidad;
double dash_parameter;
double const dash_power_rate = 0.006, effort = 0.8;
double const inertia_moment = 5.0;
dis_to_point = (m_target - agent_p).mag();
dir_to_point = Rad2Deg( atan2( m_target.y - agent_p.y , m_target.x - agent_p.x) );
if( dis_to_point > m_radius ) // El agente no ha llegado al punto
{
ang_permisible = Rad2Deg( atan2( m_radius , dis_to_point ) );
turn_parameter = dir_to_point - m_world->me().angleDeg();
turn_parameter = entre180( turn_parameter );
velocidad.x = m_world->me().speed_amount;
velocidad.y = m_world->me().speed_dir;
if( ang_permisible < turn_parameter * 0.1 || dis_to_point > 25.0 )
ang_permisible = 25.0;
if( fabs(turn_parameter) > ang_permisible ) // el agente no esta bien alineado al punto
{
velocidad = Vector2D::fromPolar( velocidad.x, Deg2Rad(velocidad.y) );
turn_parameter = turn_parameter *(1.0 + inertia_moment*velocidad.mag() );
turn_parameter = entre180( turn_parameter );
m_command->append_turn( turn_parameter );
}
else
{
velocidad = Vector2D::fromPolar( velocidad.x, Deg2Rad(velocidad.y - m_world->me().angleDeg()) );
dash_parameter = ( dis_to_point - velocidad.x ) / ( dash_power_rate * effort );
if( dash_parameter > 100.0)
dash_parameter = 100.0;
if( m_dash_override )
m_command->append_dash( m_dash_power );
else
m_command->append_dash( dash_parameter );
}
}
else
{
// El agente llegó al punto
}
}
示例2: zero_vel
void
FreezeBall::call()
{
const BodySensor & body = m_world->gameData().sensor_handler.last_sense;
const ServerParam & param = m_world->gameData().game_parameter.server_param;
double pow_needed;
double angle_needed;
Vector2D zero_vel(0.0, 0.0);
Vector2D p = m_world->me().pos; // Posición del agente
double theta = m_world->me().angleDeg(); // Orientación del agente
Vector2D vn = m_world->estBallVelocity();
Vector2D bn = m_world->estBallPosition();
Vector2D pv = Vector2D::fromPolar( body.speed_amount,
Deg2Rad( body.speed_direction + theta ) );
Vector2D pn_bn; // vector de bn a pn
Vector2D pn = p + pv; //Posición del agente en el siguiente ciclo
pn_bn = pn-bn;
double dist = pn_bn.mag();
double dir_diff = std::abs( entre180( theta - Rad2Deg( pn_bn.angle() ) ) );
double f = 1 - 0.25*(dir_diff/180.0) -0.25*(dist/param.kickable_margin);
if( f == 0.0 ) f = 0.001;
if( vn.x == 0.0 && vn.y == 0.0 )
{
pow_needed = 0.0;
angle_needed = 0.0;
}
else
{
pow_needed = vn.mag() / ( param.kick_power_rate * f ) ;
angle_needed = entre180( Rad2Deg( std::atan2( vn.y, vn.x ) ) + 180 - theta);
}
m_command->append_kick( pow_needed, angle_needed );
}