00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __rdMimic_h__
00010 #define __rdMimic_h__
00011
00012
00013
00014
00015
00016 #include <rdModel.h>
00017 #include "rdMimicDLL.h"
00018
00019
00020
00021
00029 class RDMIMIC_API rdMimic : public rdModel
00030 {
00031
00032
00033
00034
00035 public:
00037 static const int GROUND;
00038 protected:
00040
00041
00042
00043
00044
00045
00046
00047
00048 public:
00049 rdMimic();
00050 virtual ~rdMimic();
00051 private:
00052 void setNull();
00053 void constructSystemVariables();
00054 void constructNames();
00055
00056
00057
00058
00059 public:
00060
00061 virtual void
00062 setGravity(double aGrav[3]);
00063 virtual void
00064 getGravity(double rGrav[3]) const;
00065
00066
00067 virtual void
00068 setConfiguration(const double aQ[],const double aU[]);
00069 virtual void
00070 setConfiguration(const double aY[]);
00071
00072
00073 virtual int getGroundID() const;
00074
00075
00076 virtual double
00077 getMass(int aBody) const;
00078 virtual int
00079 getInertiaBodyLocal(int aBody,double rI[3][3]) const;
00080 virtual int
00081 getInertiaBodyLocal(int aBody,double *rI) const;
00082 virtual void
00083 getSystemInertia(double *rM,double rCOM[3],double rI[3][3]) const;
00084 virtual void
00085 getSystemInertia(double *rM,double *rCOM,double *rI) const;
00086
00087
00088 virtual void
00089 getPosition(int aBody,const double aPoint[3],double rPos[3]) const;
00090 virtual void
00091 getVelocity(int aBody,const double aPoint[3],double rVel[3]) const;
00092 virtual void
00093 getAcceleration(int aBody,const double aPoint[3],double rAcc[3]) const;
00094 virtual void
00095 getDirectionCosines(int aBody,double rDirCos[3][3]) const;
00096 virtual void
00097 getDirectionCosines(int aBody,double *rDirCos) const;
00098 virtual void
00099 getAngularVelocity(int aBody,double rAngVel[3]) const;
00100 virtual void
00101 getAngularVelocityBodyLocal(int aBody,double rAngVel[3]) const;
00102 virtual void
00103 getAngularAcceleration(int aBody,double rAngAcc[3]) const;
00104 virtual void
00105 getAngularAccelerationBodyLocal(int aBody,double rAngAcc[3]) const;
00106
00107
00108
00109
00110
00111 virtual void
00112 applyForce(int aBody,const double aPoint[3],const double aForce[3]);
00113 virtual void
00114 applyForces(int aN,const int aBodies[],const double aPoints[][3],
00115 const double aForces[][3]);
00116 virtual void
00117 applyForces(int aN,const int aBodies[],const double *aPoints,
00118 const double *aForces);
00119
00120
00121 virtual void
00122 applyForceBodyLocal(int aBody,const double aPoint[3],
00123 const double aForce[3]);
00124 virtual void
00125 applyForcesBodyLocal(int aN,const int aBodies[],const double aPoints[][3],
00126 const double aForces[][3]);
00127 virtual void
00128 applyForcesBodyLocal(int aN,const int aBodies[],const double *aPoints,
00129 const double *aForces);
00130
00131
00132 virtual void
00133 applyTorque(int aBody,const double aTorque[3]);
00134 virtual void
00135 applyTorques(int aN,const int aBodies[],const double aTorques[][3]);
00136 virtual void
00137 applyTorques(int aN,const int aBodies[],const double *aTorques);
00138
00139
00140 virtual void
00141 applyTorqueBodyLocal(int aBody,const double aTorque[3]);
00142 virtual void
00143 applyTorquesBodyLocal(int aN,const int aBodies[],
00144 const double aTorques[][3]);
00145 virtual void
00146 applyTorquesBodyLocal(int aN,const int aBodies[],const double *aTorques);
00147
00148
00149 virtual void
00150 applyGeneralizedForce(int aU,double aF);
00151 virtual void
00152 applyGeneralizedForces(const double aF[]);
00153 virtual void
00154 applyGeneralizedForces(int aN,const int aU[],const double aF[]);
00155
00156
00157 virtual double
00158 getNetAppliedGeneralizedForce(int aU) const;
00159 virtual void
00160 computeGeneralizedForces(double aDUDT[],double rF[]) const;
00161
00162
00163
00164
00165
00166 virtual int
00167 computeAccelerations(double *dqdt,double *dudt);
00168 virtual void
00169 formMassMatrix(double *rI);
00170 virtual void
00171 formEulerTransform(int aBody,double *rE) const;
00172 virtual void
00173 formJacobianTranslation(int aBody,const double aBodyPoint[3],double *rJ,
00174 int aRefBody=-1) const;
00175 virtual void
00176 formJacobianOrientation(int aBody,double *rJ0,
00177 int aRefBody=-1) const;
00178 virtual void
00179 formJacobianEuler(int aBody,double *rJE,
00180 int aRefBody=-1) const;
00181
00182
00183
00184
00185 virtual void
00186 transform(int aBody1,const double aVec1[3],int aBody2,double rVec2[3])
00187 const;
00188
00189 virtual void
00190 convertQuaternionsToAngles(double *q,double *qang) const;
00191 virtual void
00192 convertAnglesToQuaternions(double *qang,double *q) const;
00193
00194 virtual void
00195 convertRadiansToDegrees(double *aQRad,double *aQDeg) const;
00196 virtual void
00197 convertDegreesToRadians(double *aQDeg,double *aQRad) const;
00198
00199 virtual void
00200 convertAnglesToDirectionCosines(double aE1,double aE2,double aE3,
00201 double rDirCos[3][3]) const;
00202 virtual void
00203 convertAnglesToDirectionCosines(double aE1,double aE2,double aE3,
00204 double *rDirCos) const;
00205
00206 virtual void
00207 convertDirectionCosinesToAngles(double aDirCos[3][3],
00208 double *rE1,double *rE2,double *rE3) const;
00209 virtual void
00210 convertDirectionCosinesToAngles(double *aDirCos,
00211 double *rE1,double *rE2,double *rE3) const;
00212
00213 virtual void
00214 convertDirectionCosinesToQuaternions(double aDirCos[3][3],
00215 double *rQ1,double *rQ2,double *rQ3,double *rQ4) const;
00216 virtual void
00217 convertDirectionCosinesToQuaternions(double *aDirCos,
00218 double *rQ1,double *rQ2,double *rQ3,double *rQ4) const;
00219
00220 virtual void
00221 convertQuaternionsToDirectionCosines(
00222 double aQ1,double aQ2,double aQ3,double aQ4,double rDirCos[3][3]) const;
00223 virtual void
00224 convertQuaternionsToDirectionCosines(
00225 double aQ1,double aQ2,double aQ3,double aQ4,double *rDirCos) const;
00226
00227
00228
00229
00230 };
00231
00232
00233
00234 #endif // __rdMimic_h__
00235
00236