00001 #ifndef __RK4SPRING_H__ 00002 #define __RK4SPRING_H__ 00003 00004 #include "AbstractRK4Integrator.h" 00005 00006 00007 //---------------------------------------------------------------------------------------------------------------------- 00011 //---------------------------------------------------------------------------------------------------------------------- 00012 00013 class RK4Spring : public AbstractRK4Integrator 00014 { 00015 public : 00016 //---------------------------------------------------------------------------------------------------------------------- 00023 //---------------------------------------------------------------------------------------------------------------------- 00024 RK4Spring( 00025 ngl::Vector _a, 00026 ngl::Vector _b, 00027 float _length, 00028 float _k, 00029 float _damping 00030 ); 00031 00032 //---------------------------------------------------------------------------------------------------------------------- 00035 //---------------------------------------------------------------------------------------------------------------------- 00036 void update(); 00037 //---------------------------------------------------------------------------------------------------------------------- 00040 //---------------------------------------------------------------------------------------------------------------------- 00041 inline void setTimeStep( 00042 float _t 00043 ) 00044 {m_timestep=_t;} 00045 //---------------------------------------------------------------------------------------------------------------------- 00056 //---------------------------------------------------------------------------------------------------------------------- 00057 ngl::Vector motionFunction( 00058 const State &_state, 00059 float _t 00060 ); 00061 00062 00063 //---------------------------------------------------------------------------------------------------------------------- 00066 //---------------------------------------------------------------------------------------------------------------------- 00067 inline void setAPosition(const ngl::Vector &_a){m_a=_a; m_initialA=_a;} 00068 //---------------------------------------------------------------------------------------------------------------------- 00071 //---------------------------------------------------------------------------------------------------------------------- 00072 inline void setBPosition(const ngl::Vector &_b){m_b=_b; m_initialB=_b;} 00073 00074 //---------------------------------------------------------------------------------------------------------------------- 00077 //---------------------------------------------------------------------------------------------------------------------- 00078 inline ngl::Vector getAPosition() const {return m_a;} 00079 //---------------------------------------------------------------------------------------------------------------------- 00082 //---------------------------------------------------------------------------------------------------------------------- 00083 inline ngl::Vector getBPosition() const {return m_b;} 00084 00085 00086 //---------------------------------------------------------------------------------------------------------------------- 00089 //---------------------------------------------------------------------------------------------------------------------- 00090 inline ngl::Vector getInitialAPosition() const {return m_initialA;} 00091 //---------------------------------------------------------------------------------------------------------------------- 00094 //---------------------------------------------------------------------------------------------------------------------- 00095 inline ngl::Vector getInitialBPosition() const {return m_initialB;} 00096 00097 //---------------------------------------------------------------------------------------------------------------------- 00100 //---------------------------------------------------------------------------------------------------------------------- 00101 inline void setK(float _k){m_k=_k;} 00102 //---------------------------------------------------------------------------------------------------------------------- 00105 //---------------------------------------------------------------------------------------------------------------------- 00106 inline void setLength(float _l){m_length=_l;} 00107 //---------------------------------------------------------------------------------------------------------------------- 00110 //---------------------------------------------------------------------------------------------------------------------- 00111 inline void setDamping(float _d){m_damping=_d;} 00112 //---------------------------------------------------------------------------------------------------------------------- 00115 //---------------------------------------------------------------------------------------------------------------------- 00116 inline void setAFixed(bool _f){m_aFixed=_f;} 00117 //---------------------------------------------------------------------------------------------------------------------- 00120 //---------------------------------------------------------------------------------------------------------------------- 00121 inline void setBFixed(bool _f){m_bFixed=_f;} 00122 //---------------------------------------------------------------------------------------------------------------------- 00125 //---------------------------------------------------------------------------------------------------------------------- 00126 00127 void reset(); 00128 00129 private : 00130 //---------------------------------------------------------------------------------------------------------------------- 00132 //---------------------------------------------------------------------------------------------------------------------- 00133 float m_k; 00134 //---------------------------------------------------------------------------------------------------------------------- 00136 //---------------------------------------------------------------------------------------------------------------------- 00137 float m_damping; 00138 //---------------------------------------------------------------------------------------------------------------------- 00140 //---------------------------------------------------------------------------------------------------------------------- 00141 ngl::Vector m_displacement; 00142 //---------------------------------------------------------------------------------------------------------------------- 00144 //---------------------------------------------------------------------------------------------------------------------- 00145 ngl::Vector m_velocity; 00146 //---------------------------------------------------------------------------------------------------------------------- 00148 //---------------------------------------------------------------------------------------------------------------------- 00149 ngl::Vector m_a; 00150 //---------------------------------------------------------------------------------------------------------------------- 00152 //---------------------------------------------------------------------------------------------------------------------- 00153 ngl::Vector m_b; 00154 //---------------------------------------------------------------------------------------------------------------------- 00156 //---------------------------------------------------------------------------------------------------------------------- 00157 ngl::Vector m_initialA; 00158 //---------------------------------------------------------------------------------------------------------------------- 00160 //---------------------------------------------------------------------------------------------------------------------- 00161 ngl::Vector m_initialB; 00162 //---------------------------------------------------------------------------------------------------------------------- 00164 //---------------------------------------------------------------------------------------------------------------------- 00165 bool m_aFixed; 00166 //---------------------------------------------------------------------------------------------------------------------- 00168 //---------------------------------------------------------------------------------------------------------------------- 00169 bool m_bFixed; 00170 //---------------------------------------------------------------------------------------------------------------------- 00172 //---------------------------------------------------------------------------------------------------------------------- 00173 float m_length; 00174 //---------------------------------------------------------------------------------------------------------------------- 00176 //---------------------------------------------------------------------------------------------------------------------- 00177 float m_timestep; 00178 //---------------------------------------------------------------------------------------------------------------------- 00180 //---------------------------------------------------------------------------------------------------------------------- 00181 float m_t; 00182 }; 00183 00184 00185 #endif