1
0
Fork 0

some minor optimization

This commit is contained in:
torsten 2009-06-05 09:14:22 +00:00 committed by Tim Moore
parent 031f9bb33b
commit 0503f82781

View file

@ -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