AnimaL |
Tutorial |
Documentation |
00001 /*************************************************************************** 00002 PhysicalSolver.h - description 00003 ------------------- 00004 begin : Sat Nov 8 2003 00005 copyright : (C) 2003 by François Faure 00006 email : 00007 ***************************************************************************/ 00008 00009 #ifndef animal_PHYSICAL_SOLVER_H 00010 #define animal_PHYSICAL_SOLVER_H 00011 00012 //#include <animal/odeSolver.h> 00013 #include <animal/container_traits.h> 00014 #include <animal/value.h> 00015 00016 namespace animal { 00017 00018 00038 template< 00039 class t_Positions, 00040 class t_Vector, 00041 class t_InvMasses, 00042 class t_Real> 00043 class PhysicalSolver 00044 { 00045 public: 00047 PhysicalSolver(); 00048 virtual ~PhysicalSolver(); 00049 00050 typedef t_Positions Positions; 00051 typedef t_Vector Vector; 00052 typedef typename container_traits<Vector>::value_type Vec; 00053 typedef t_InvMasses InvMasses; 00054 typedef typename container_traits<InvMasses>::value_type InvMass; 00055 typedef t_Real Real; 00056 00061 virtual void computeAccelerations( Vector& acc, const Positions& pos, const Vector& vel ); 00062 00067 virtual void applyForces( Vector& acc, const Vector& forces ); 00068 00070 void applyExponentialDamping( Vector& v, Real dt ); 00071 00073 virtual void computeForces( Vector& acc, const Positions& pos, const Vector& vel ); 00074 00075 00079 virtual void set_gravity( const Vec& _newVal); 00081 virtual const Vec& get_gravity(); 00083 virtual void set_useGravity( const bool& _newVal); 00085 virtual const bool& get_useGravity(); 00087 void applyGravity( Vector& a ); 00093 virtual void set_useExponentialDamping( const bool& _newVal); 00095 virtual const bool& get_useExponentialDamping(); 00097 virtual void set_exponentialDamping( const Real& _newVal); 00099 virtual const Real& get_exponentialDamping(); 00105 virtual void set_useMass( const bool& _newVal); 00107 virtual const bool& get_useMass(); 00109 virtual void set_useSingleMass( const bool& _newVal); 00111 virtual const bool& get_useSingleMass(); 00113 virtual void set_singleInvMass( const InvMass& _newVal); 00115 virtual const InvMass& get_singleInvMass(); 00117 virtual void set_invMasses( InvMasses* _newVal); 00119 virtual const InvMasses* get_invMasses(); 00122 //protected: // Protected attributes 00124 Vec _gravity; 00126 bool _useGravity; 00128 Real _exponentialDamping; 00130 InvMasses* _invMasses; 00132 bool _useExponentialDamping; 00134 InvMass _singleInvMass; 00136 static Vec zero(){ return Value<Vec>::zero(); } 00138 bool _useMass; 00140 bool _useSingleMass; 00141 }; 00142 00143 }//animal 00144 00145 00146 #endif