#ifdef FGFS
# include <simgear/compiler.h>
-# ifdef SG_HAVE_STD_INCLUDES
-# include <cmath>
-# else
+# include <math.h>
+#else
+# if defined (sgi) && !defined(__GNUC__)
# include <math.h>
+# else
+# include <cmath>
# endif
-#else
-# include <cmath>
-#endif
-
-#ifndef M_PI
-# include <simgear/constants.h>
-# define M_PI SG_PI
#endif
#include "FGModel.h"
-#include "FGMatrix.h"
+#include "FGMatrix33.h"
+#include "FGColumnVector3.h"
+#include "FGColumnVector4.h"
-#define ID_ROTATION "$Header$"
+#define ID_ROTATION "$Id$"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CLASS DECLARATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+namespace JSBSim {
+
class FGRotation : public FGModel
{
- 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);
-
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 FGColumnVector3& GetPQR(void) {return vPQR;}
+ inline double GetPQR(int axis) const {return vPQR(axis);}
+ inline FGColumnVector3& GetAeroPQR(void) {return vAeroPQR;}
+ inline double GetAeroPQR(int axis) const {return vAeroPQR(axis);}
+ inline FGColumnVector3& GetPQRdot(void) {return vPQRdot;}
+ inline double GetPQRdot(int idx) const {return vPQRdot(idx);}
+ inline FGColumnVector3& GetEuler(void) {return vEuler;}
+ inline double GetEuler(int axis) const {return vEuler(axis);}
+ inline FGColumnVector3& GetEulerRates(void) { return vEulerRates; }
+ inline double GetEulerRates(int axis) const { return vEulerRates(axis); }
+ inline void SetPQR(FGColumnVector3 tt) {vPQR = tt;}
+ inline void SetPQR(double p, double q, double r) {vPQR(eP)=p;
+ vPQR(eQ)=q;
+ vPQR(eR)=r;}
+ inline void SetAeroPQR(FGColumnVector3 tt) {vAeroPQR = tt;}
+ inline void SetAeroPQR(double p, double q, double r) {vAeroPQR(eP)=p;
+ vAeroPQR(eQ)=q;
+ vAeroPQR(eR)=r;}
+ inline void SetEuler(FGColumnVector3 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 double Getphi(void) const {return vEuler(1);}
+ inline double Gettht(void) const {return vEuler(2);}
+ inline double Getpsi(void) const {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;}
+ inline double GetCosphi(void) const {return cPhi;}
+ inline double GetCostht(void) const {return cTht;}
+ inline double GetCospsi(void) const {return cPsi;}
+ inline double GetSinphi(void) const {return sPhi;}
+ inline double GetSintht(void) const {return sTht;}
+ inline double GetSinpsi(void) const {return sPsi;}
+
+ void bind(void);
+ void unbind(void);
+
+private:
+ FGColumnVector3 vPQR;
+ FGColumnVector3 vAeroPQR;
+ FGColumnVector3 vPQRdot;
+ FGColumnVector3 vPQRdot_prev[3];
+ FGColumnVector3 vMoments;
+ FGColumnVector3 vEuler;
+ FGColumnVector3 vEulerRates;
+
+ double cTht,sTht;
+ double cPhi,sPhi;
+ double cPsi,sPsi;
+
+ double Ixx, Iyy, Izz, Ixz;
+ double dt;
+ void GetState(void);
+ void Debug(int from);
};
-
+}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#endif
+