Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

rdSDFast.h

00001 // rdSDFast.h
00002 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00003 // Copyright 2000, 2001, 2003 Realistic Dynamics, Inc.
00004 // All rights reserved.
00005 //
00006 // Please do not read, copy, distribute, or use without permission.
00007 // Contact: fca@RealisticDynamics.com
00008 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00009 #ifndef __rdSDFast_h__
00010 #define __rdSDFast_h__
00011 
00012 
00013 // INCLUDE
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 // DATA
00033 //=============================================================================
00034 protected:
00036    static const int GROUND;
00038    int *_u2jMap;
00040    int *_u2aMap;
00041 
00042 //=============================================================================
00043 // METHODS
00044 //=============================================================================
00045    //--------------------------------------------------------------------------
00046    // CONSTRUCTION
00047    //--------------------------------------------------------------------------
00048 public:
00049    rdSDFast();
00050    virtual ~rdSDFast();
00051 private:
00052    void setNull();
00053    void constructSystemVariables();
00054    void constructJointAndAxisMaps();
00055    void constructNames();
00056    //void constructBodies();
00057 
00058    //--------------------------------------------------------------------------
00059    // GET AND SET
00060    //--------------------------------------------------------------------------
00061 public:
00062    // GRAVITY
00063    virtual void
00064       setGravity(double aGrav[3]);
00065    virtual void
00066       getGravity(double rGrav[3]) const;
00067 
00068    // CONFIGURATION
00069    virtual void
00070       setConfiguration(const double aQ[],const double aU[]);
00071    virtual void
00072       setConfiguration(const double aY[]);
00073 
00074    // BODY INFORMATION
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    // INERTIA
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    // KINEMATICS
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    // LOAD APPLICATION
00113    //--------------------------------------------------------------------------
00114    // FORCES EXPRESSED IN INERTIAL FRAME
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    // FORCES EXPRESSED IN BODY-LOCAL FRAME
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    // TORQUES EXPRESSED IN INERTIAL FRAME
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    // TORQUES EXPRESSED IN BODY-LOCAL FRAME (sdbodyt())
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    // GENERALIZED FORCES
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    // LOAD ACCESS AND COMPUTATION
00161    virtual double
00162       getNetAppliedGeneralizedForce(int aU) const;
00163    virtual void
00164       computeGeneralizedForces(double aDUDT[],double rF[]) const;
00165 
00166 
00167    //--------------------------------------------------------------------------
00168    // EQUATIONS OF MOTION
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    // UTILITY
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 }; // END of class rdSDFast
00243 //=============================================================================
00244 //=============================================================================
00245 
00246 #endif // __rdSDFast_h__
00247 
00248 

Generated on Wed Aug 20 02:17:06 2003 for Simulation Software by doxygen1.3