#include "FGPropertyManager.h"
+namespace JSBSim {
+
static const char *IdSrc = "$Id$";
static const char *IdHdr = ID_POSITION;
{
Name = "FGPosition";
LongitudeDot = LatitudeDot = RadiusDot = 0.0;
- lastLongitudeDot = lastLatitudeDot = lastRadiusDot = 0.0;
+
+ for (int i=0;i<3;i++) {
+ LatitudeDot_prev[i] = 0.0;
+ LongitudeDot_prev[i] = 0.0;
+ RadiusDot_prev[i] = 0.0;
+ }
+
Longitude = Latitude = 0.0;
gamma = Vt = Vground = 0.0;
hoverbmac = hoverbcg = 0.0;
In FGFS, SeaLevelRadius is stuffed from FGJSBSim in JSBSim.cxx each pass.
*/
-bool FGPosition::Run(void) {
+bool FGPosition::Run(void)
+{
double cosLat;
double hdot_Vt;
FGColumnVector3 vMac;
cosLat = cos(Latitude);
if (cosLat != 0) LongitudeDot = vVel(eEast) / (Radius * cosLat);
-
LatitudeDot = vVel(eNorth) / Radius;
RadiusDot = -vVel(eDown);
- Longitude += 0.5*dt*rate*(LongitudeDot + lastLongitudeDot);
- Latitude += 0.5*dt*rate*(LatitudeDot + lastLatitudeDot);
- Radius += 0.5*dt*rate*(RadiusDot + lastRadiusDot);
+ Longitude += State->Integrate(FGState::TRAPZ, dt*rate, LongitudeDot, LongitudeDot_prev);
+ Latitude += State->Integrate(FGState::TRAPZ, dt*rate, LatitudeDot, LatitudeDot_prev);
+ Radius += State->Integrate(FGState::TRAPZ, dt*rate, RadiusDot, RadiusDot_prev);
h = Radius - SeaLevelRadius; // Geocentric
DistanceAGL = Radius - RunwayRadius; // Geocentric
-
hoverbcg = DistanceAGL/b;
- vMac=State->GetTb2l()*Aircraft->GetXYZrp();
+ vMac = State->GetTb2l()*Aircraft->GetXYZrp();
vMac *= inchtoft;
hoverbmac = (DistanceAGL + vMac(3))/b;
gamma = 0.0;
}
- lastLatitudeDot = LatitudeDot;
- lastLongitudeDot = LongitudeDot;
- lastRadiusDot = RadiusDot;
-
return false;
} else {
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void FGPosition::GetState(void) {
+void FGPosition::GetState(void)
+{
dt = State->Getdt();
Vt = Translation->GetVt();
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void FGPosition::Seth(double tt) {
+void FGPosition::Seth(double tt)
+{
h = tt;
Radius = h + SeaLevelRadius;
DistanceAGL = Radius - RunwayRadius; // Geocentric
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void FGPosition::SetDistanceAGL(double tt) {
+void FGPosition::SetDistanceAGL(double tt)
+{
DistanceAGL=tt;
Radius = RunwayRadius + DistanceAGL;
h = Radius - SeaLevelRadius;
}
}
}
-
+}