some minor optimization
This commit is contained in:
parent
031f9bb33b
commit
0503f82781
1 changed files with 17 additions and 12 deletions
|
@ -391,11 +391,9 @@ static void setupWindBranch( string branchName, double dir, double speed, double
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setupWind( bool setup_boundary, bool setup_aloft, double dir, double speed, double gust )
|
static void setupWind( bool setup_aloft, double dir, double speed, double gust )
|
||||||
{
|
{
|
||||||
if( setup_boundary )
|
setupWindBranch( "boundary", dir, speed, gust );
|
||||||
setupWindBranch( "boundary", dir, speed, gust );
|
|
||||||
|
|
||||||
if( setup_aloft )
|
if( setup_aloft )
|
||||||
setupWindBranch( "aloft", dir, speed, gust );
|
setupWindBranch( "aloft", dir, speed, gust );
|
||||||
}
|
}
|
||||||
|
@ -451,7 +449,7 @@ FGMetarCtrl::update(double dt)
|
||||||
double dir = base_wind_dir_n->getDoubleValue()+magnetic_variation_n->getDoubleValue();
|
double dir = base_wind_dir_n->getDoubleValue()+magnetic_variation_n->getDoubleValue();
|
||||||
double speed = base_wind_speed_n->getDoubleValue();
|
double speed = base_wind_speed_n->getDoubleValue();
|
||||||
double gust = gust_wind_speed_n->getDoubleValue();
|
double gust = gust_wind_speed_n->getDoubleValue();
|
||||||
setupWind(true, setup_winds_aloft, dir, speed, gust);
|
setupWind(setup_winds_aloft, dir, speed, gust);
|
||||||
|
|
||||||
double metarvis = min_visibility_n->getDoubleValue();
|
double metarvis = min_visibility_n->getDoubleValue();
|
||||||
fgDefaultWeatherValue("visibility-m", metarvis);
|
fgDefaultWeatherValue("visibility-m", metarvis);
|
||||||
|
@ -521,10 +519,7 @@ FGMetarCtrl::update(double dt)
|
||||||
current[1] = interpolate_val(current[1], metar[1], maxdy);
|
current[1] = interpolate_val(current[1], metar[1], maxdy);
|
||||||
|
|
||||||
// Now convert back to polar coordinates.
|
// Now convert back to polar coordinates.
|
||||||
if ((current[0] == 0.0) && (current[1] == 0.0)) {
|
if ((fabs(current[0]) > 0.1) || (fabs(current[1]) > 0.1)) {
|
||||||
// Special case where there is no wind (otherwise atan2 barfs)
|
|
||||||
speed = 0.0;
|
|
||||||
} else {
|
|
||||||
// Some real wind to convert back from. Work out the speed
|
// Some real wind to convert back from. Work out the speed
|
||||||
// and direction value in degrees.
|
// and direction value in degrees.
|
||||||
speed = sqrt((current[0] * current[0]) + (current[1] * current[1]));
|
speed = sqrt((current[0] * current[0]) + (current[1] * current[1]));
|
||||||
|
@ -535,9 +530,12 @@ FGMetarCtrl::update(double dt)
|
||||||
dir_from += 360.0;
|
dir_from += 360.0;
|
||||||
|
|
||||||
SG_LOG( SG_GENERAL, SG_DEBUG, "Wind : " << dir_from << "@" << speed);
|
SG_LOG( SG_GENERAL, SG_DEBUG, "Wind : " << dir_from << "@" << speed);
|
||||||
|
} else {
|
||||||
|
// Special case where there is no wind (otherwise atan2 barfs)
|
||||||
|
speed = 0.0;
|
||||||
}
|
}
|
||||||
double gust = gust_wind_speed_n->getDoubleValue();
|
double gust = gust_wind_speed_n->getDoubleValue();
|
||||||
setupWind(true, setup_winds_aloft, dir_from, speed, gust);
|
setupWind(setup_winds_aloft, dir_from, speed, gust);
|
||||||
reinit_required = true;
|
reinit_required = true;
|
||||||
} else {
|
} else {
|
||||||
wind_interpolation_required = false;
|
wind_interpolation_required = false;
|
||||||
|
@ -546,6 +544,9 @@ FGMetarCtrl::update(double dt)
|
||||||
// interpolation of wind vector is finished, apply wind
|
// interpolation of wind vector is finished, apply wind
|
||||||
// variations and gusts for the boundary layer only
|
// variations and gusts for the boundary layer only
|
||||||
|
|
||||||
|
|
||||||
|
bool wind_modulated = false;
|
||||||
|
|
||||||
// start with the main wind direction
|
// start with the main wind direction
|
||||||
double wind_dir = base_wind_dir_n->getDoubleValue()+magnetic_variation_n->getDoubleValue();
|
double wind_dir = base_wind_dir_n->getDoubleValue()+magnetic_variation_n->getDoubleValue();
|
||||||
double min = convert_to_180(base_wind_range_from_n->getDoubleValue()+magnetic_variation_n->getDoubleValue());
|
double min = convert_to_180(base_wind_range_from_n->getDoubleValue()+magnetic_variation_n->getDoubleValue());
|
||||||
|
@ -556,6 +557,7 @@ FGMetarCtrl::update(double dt)
|
||||||
wind_dir = min+(max-min)*f;
|
wind_dir = min+(max-min)*f;
|
||||||
double old = convert_to_180(boundary_wind_from_heading_n->getDoubleValue());
|
double old = convert_to_180(boundary_wind_from_heading_n->getDoubleValue());
|
||||||
wind_dir = convert_to_360(fgGetLowPass(old, wind_dir, dt ));
|
wind_dir = convert_to_360(fgGetLowPass(old, wind_dir, dt ));
|
||||||
|
wind_modulated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// start with main wind speed
|
// start with main wind speed
|
||||||
|
@ -566,9 +568,12 @@ FGMetarCtrl::update(double dt)
|
||||||
double f = windModulator->get_magnitude_factor_norm();
|
double f = windModulator->get_magnitude_factor_norm();
|
||||||
wind_speed = wind_speed+(max-wind_speed)*f;
|
wind_speed = wind_speed+(max-wind_speed)*f;
|
||||||
wind_speed = fgGetLowPass(boundary_wind_speed_n->getDoubleValue(), wind_speed, dt );
|
wind_speed = fgGetLowPass(boundary_wind_speed_n->getDoubleValue(), wind_speed, dt );
|
||||||
|
wind_modulated = true;
|
||||||
|
}
|
||||||
|
if( wind_modulated ) {
|
||||||
|
setupWind(false, wind_dir, wind_speed, max);
|
||||||
|
reinit_required = true;
|
||||||
}
|
}
|
||||||
setupWind(true, false, wind_dir, wind_speed, max);
|
|
||||||
reinit_required = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now handle the visibility. We convert both visibility values
|
// Now handle the visibility. We convert both visibility values
|
||||||
|
|
Loading…
Reference in a new issue