00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _ODE_MASS_H_
00024 #define _ODE_MASS_H_
00025
00026 #include <ode/common.h>
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 struct dMass;
00033 typedef struct dMass dMass;
00034
00043 ODE_API int dMassCheck(const dMass *m);
00044
00045 ODE_API void dMassSetZero (dMass *);
00046
00047 ODE_API void dMassSetParameters (dMass *, dReal themass,
00048 dReal cgx, dReal cgy, dReal cgz,
00049 dReal I11, dReal I22, dReal I33,
00050 dReal I12, dReal I13, dReal I23);
00051
00052 ODE_API void dMassSetSphere (dMass *, dReal density, dReal radius);
00053 ODE_API void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius);
00054
00055 ODE_API void dMassSetCapsule (dMass *, dReal density, int direction,
00056 dReal radius, dReal length);
00057 ODE_API void dMassSetCapsuleTotal (dMass *, dReal total_mass, int direction,
00058 dReal radius, dReal length);
00059
00060 ODE_API void dMassSetCylinder (dMass *, dReal density, int direction,
00061 dReal radius, dReal length);
00062 ODE_API void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction,
00063 dReal radius, dReal length);
00064
00065 ODE_API void dMassSetBox (dMass *, dReal density,
00066 dReal lx, dReal ly, dReal lz);
00067 ODE_API void dMassSetBoxTotal (dMass *, dReal total_mass,
00068 dReal lx, dReal ly, dReal lz);
00069
00070 ODE_API void dMassSetTrimesh (dMass *, dReal density, dGeomID g);
00071
00072 ODE_API void dMassAdjust (dMass *, dReal newmass);
00073
00074 ODE_API void dMassTranslate (dMass *, dReal x, dReal y, dReal z);
00075
00076 ODE_API void dMassRotate (dMass *, const dMatrix3 R);
00077
00078 ODE_API void dMassAdd (dMass *a, const dMass *b);
00079
00080
00081 #define dMassSetCappedCylinder dMassSetCapsule
00082 #define dMassSetCappedCylinderTotal dMassSetCapsuleTotal
00083
00084
00085 struct dMass {
00086 dReal mass;
00087 dVector4 c;
00088 dMatrix3 I;
00089
00090 #ifdef __cplusplus
00091 dMass()
00092 { dMassSetZero (this); }
00093 void setZero()
00094 { dMassSetZero (this); }
00095 void setParameters (dReal themass, dReal cgx, dReal cgy, dReal cgz,
00096 dReal I11, dReal I22, dReal I33,
00097 dReal I12, dReal I13, dReal I23)
00098 { dMassSetParameters (this,themass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23); }
00099 void setSphere (dReal density, dReal radius)
00100 { dMassSetSphere (this,density,radius); }
00101 void setCapsule (dReal density, int direction, dReal a, dReal b)
00102 { dMassSetCappedCylinder (this,density,direction,a,b); }
00103 void setCappedCylinder (dReal density, int direction, dReal a, dReal b)
00104 { setCapsule(density, direction, a, b); }
00105 void setBox (dReal density, dReal lx, dReal ly, dReal lz)
00106 { dMassSetBox (this,density,lx,ly,lz); }
00107 void adjust (dReal newmass)
00108 { dMassAdjust (this,newmass); }
00109 void translate (dReal x, dReal y, dReal z)
00110 { dMassTranslate (this,x,y,z); }
00111 void rotate (const dMatrix3 R)
00112 { dMassRotate (this,R); }
00113 void add (const dMass *b)
00114 { dMassAdd (this,b); }
00115 #endif
00116 };
00117
00118
00119 #ifdef __cplusplus
00120 }
00121 #endif
00122
00123 #endif