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