1
0
Fork 0

Fixed the initial location so that geodetic latitude and ASL are kept in sync.

This commit is contained in:
Bertrand Coconnier 2016-08-28 12:23:17 +02:00
parent 3c4542fba6
commit c226e08293
3 changed files with 28 additions and 15 deletions

View file

@ -1023,16 +1023,17 @@ void FGJSBsim::set_Latitude(double lat)
SG_LOG(SG_FLIGHT,SG_INFO,"FGJSBsim::set_Latitude: " << lat );
SG_LOG(SG_FLIGHT,SG_INFO," cur alt (ft) = " << alt );
sgGeodToGeoc( lat, alt * SG_FEET_TO_METER,
&sea_level_radius_meters, &lat_geoc );
double sea_level_radius_ft = sea_level_radius_meters * SG_METER_TO_FEET;
_set_Sea_level_radius( sea_level_radius_ft );
if (needTrim)
fgic->SetLatitudeRadIC( lat_geoc );
else
fgic->SetGeodLatitudeRadIC( lat );
else {
sgGeodToGeoc( lat, alt * SG_FEET_TO_METER,
&sea_level_radius_meters, &lat_geoc );
double sea_level_radius_ft = sea_level_radius_meters * SG_METER_TO_FEET;
_set_Sea_level_radius( sea_level_radius_ft );
Propagate->SetLatitude(lat_geoc);
}
FGInterface::set_Latitude(lat);
}
@ -1055,13 +1056,8 @@ void FGJSBsim::set_Altitude(double alt)
{
SG_LOG(SG_FLIGHT,SG_INFO, "FGJSBsim::set_Altitude: " << alt );
if (needTrim) {
FGLocation position = fgic->GetPosition();
position.SetPositionGeodetic(0.0, position.GetGeodLatitudeRad(), alt);
fgic->SetAltitudeASLFtIC(position.GetAltitudeASL());
// fgic->SetLatitudeRadIC(position.GetLatitude());
}
if (needTrim)
fgic->SetAltitudeASLFtIC(alt);
else
Propagate->SetAltitudeASL(alt);

View file

@ -739,6 +739,17 @@ void FGInitialCondition::SetAltitudeASLFtIC(double alt)
//******************************************************************************
void FGInitialCondition::SetGeodLatitudeRadIC(double geodLatitude)
{
double h = ComputeGeodAltitude(geodLatitude);
double lon = position.GetLongitude();
position.SetPositionGeodetic(lon, geodLatitude, h);
lastLatitudeSet = setgeod;
}
//******************************************************************************
void FGInitialCondition::SetLatitudeRadIC(double lat)
{
double altitude;

View file

@ -592,6 +592,12 @@ public:
@param lat Initial latitude in radians */
void SetLatitudeRadIC(double lat);
/** Sets the initial geodetic latitude.
This method modifies the geodetic altitude in order to keep the altitude
above sea level unchanged.
@param glat Initial geodetic latitude in radians */
void SetGeodLatitudeRadIC(double glat);
/** Sets the initial longitude.
@param lon Initial longitude in radians */
void SetLongitudeRadIC(double lon);