00001 #ifndef Integrator_H 00002 #define Integrator_H 00003 00004 00005 #include <ngl/Vector.h> 00006 //#include "Spring.h" 00007 #include "Cloth.h" 00008 #include <vector> 00009 00014 00019 00020 class Mass; 00021 class Spring; 00022 class Cloth; 00023 00024 class Integrator 00025 { 00026 00027 00028 public: 00029 Integrator(); 00030 ~Integrator(); 00031 00032 //---------------------------------------------------------------------------------------------------------------------- 00036 //---------------------------------------------------------------------------------------------------------------------- 00037 Mass evaluate( 00038 Mass* _initial 00039 ); 00040 //---------------------------------------------------------------------------------------------------------------------- 00046 //---------------------------------------------------------------------------------------------------------------------- 00047 Mass evaluate( 00048 Mass* _initial, 00049 float _dt, 00050 Mass &_d 00051 ); 00052 //---------------------------------------------------------------------------------------------------------------------- 00055 //---------------------------------------------------------------------------------------------------------------------- 00056 void eulerForwardIntegration(float _dt, 00057 std::vector <Mass*> _originalMasses, 00058 std::vector <Spring*> _springs 00059 ); 00060 00061 //---------------------------------------------------------------------------------------------------------------------- 00064 //---------------------------------------------------------------------------------------------------------------------- 00065 void RK_4Integration(float _dt, 00066 std::vector <Mass*> _masses, 00067 std::vector <Spring*> _springs 00068 ); 00069 00070 //---------------------------------------------------------------------------------------------------------------------- 00073 //---------------------------------------------------------------------------------------------------------------------- 00074 void verletIntegration(float _dt, 00075 std::vector <Mass*> _originalMasses, 00076 std::vector <Spring*> _springs); 00077 00078 //---------------------------------------------------------------------------------------------------------------------- 00082 //---------------------------------------------------------------------------------------------------------------------- 00083 ngl::Vector motionFunction(Mass* _state); 00084 00085 void calculateForces(std::vector<Mass*> _masses, std::vector<Spring*> _springs); 00086 00087 00088 }; 00089 00090 #endif // Integrator_H