-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Header: FGRotation.h
Author: Jon Berndt
--------------------------------------------------------------------------------
12/02/98 JSB Created
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
COMMENTS, REFERENCES, and NOTES
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420 Naval Postgraduate
School, January 1994
The order of rotations used in this class corresponds to a 3-2-1 sequence,
or Y-P-R, or Z-Y-X, if you prefer.
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SENTRY
-*******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#ifndef FGROTATION_H
#define FGROTATION_H
-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INCLUDES
-*******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#ifdef FGFS
# include <simgear/compiler.h>
# include <cmath>
#endif
+#ifndef M_PI
+# include <simgear/constants.h>
+# define M_PI FG_PI
+#endif
+
#include "FGModel.h"
#include "FGMatrix.h"
-using namespace std;
+#define ID_ROTATION "$Id$"
-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CLASS DECLARATION
-*******************************************************************************/
-
-#pragma warn -8026
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
class FGRotation : public FGModel
{
- FGColumnVector vPQR;
- FGColumnVector vPQRdot;
- FGColumnVector vMoments;
- FGColumnVector vEuler;
-
- float Ixx, Iyy, Izz, Ixz;
- float dt;
-
- void GetState(void);
-
public:
FGRotation(FGFDMExec*);
- ~FGRotation(void);
+ ~FGRotation();
bool Run(void);
inline FGColumnVector GetPQR(void) {return vPQR;}
inline FGColumnVector GetPQRdot(void) {return vPQRdot;}
inline FGColumnVector GetEuler(void) {return vEuler;}
+ inline FGColumnVector GetEulerRates(void) { return vEulerRates; }
inline void SetPQR(FGColumnVector tt) {vPQR = tt;}
inline void SetEuler(FGColumnVector tt) {vEuler = tt;}
+
inline float Getphi(void) {return vEuler(1);}
inline float Gettht(void) {return vEuler(2);}
inline float Getpsi(void) {return vEuler(3);}
+
+ inline float GetCosphi(void) {return cPhi;}
+ inline float GetCostht(void) {return cTht;}
+ inline float GetCospsi(void) {return cPsi;}
+
+ inline float GetSinphi(void) {return sPhi;}
+ inline float GetSintht(void) {return sTht;}
+ inline float GetSinpsi(void) {return sPsi;}
+
+private:
+ FGColumnVector vPQR;
+ FGColumnVector vPQRdot;
+ FGColumnVector vMoments;
+ FGColumnVector vEuler;
+ FGColumnVector vEulerRates;
+
+ float cTht,sTht;
+ float cPhi,sPhi;
+ float cPsi,sPsi;
+
+ float Ixx, Iyy, Izz, Ixz;
+ float dt;
+
+ void GetState(void);
+
+ void Debug(void);
};
-#pragma warn .8026
-/******************************************************************************/
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#endif
+