home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 March / Gamestar_82_2006-03_dvd.iso / DVDStar / Editace / quake4_sdkv10.exe / source / idlib / math / Ode.h < prev    next >
C/C++ Source or Header  |  2005-11-14  |  3KB  |  120 lines

  1.  
  2. #ifndef __MATH_ODE_H__
  3. #define __MATH_ODE_H__
  4.  
  5. /*
  6. ===============================================================================
  7.  
  8.     Numerical solvers for ordinary differential equations.
  9.  
  10. ===============================================================================
  11. */
  12.  
  13.  
  14. //===============================================================
  15. //
  16. //    idODE
  17. //
  18. //===============================================================
  19.  
  20. typedef void (*deriveFunction_t)( const float t, const void *userData, const float *state, float *derivatives );
  21.  
  22. class idODE {
  23.  
  24. public:
  25.     virtual                ~idODE( void ) {}
  26.  
  27.     virtual float        Evaluate( const float *state, float *newState, float t0, float t1 ) = 0;
  28.  
  29. protected:
  30.     int                    dimension;        // dimension in floats allocated for
  31.     deriveFunction_t    derive;            // derive function
  32.     const void *        userData;        // client data
  33. };
  34.  
  35. //===============================================================
  36. //
  37. //    idODE_Euler
  38. //
  39. //===============================================================
  40.  
  41. class idODE_Euler : public idODE {
  42.  
  43. public:
  44.                         idODE_Euler( const int dim, const deriveFunction_t dr, const void *ud );
  45.     virtual                ~idODE_Euler( void );
  46.  
  47.     virtual float        Evaluate( const float *state, float *newState, float t0, float t1 );
  48.  
  49. protected:
  50.     float *                derivatives;    // space to store derivatives
  51. };
  52.  
  53. //===============================================================
  54. //
  55. //    idODE_Midpoint
  56. //
  57. //===============================================================
  58.  
  59. class idODE_Midpoint : public idODE {
  60.  
  61. public:
  62.                         idODE_Midpoint( const int dim, const deriveFunction_t dr, const void *ud );
  63.     virtual                ~idODE_Midpoint( void );
  64.  
  65.     virtual float        Evaluate( const float *state, float *newState, float t0, float t1 );
  66.  
  67. protected:
  68.     float *                tmpState;
  69.     float *                derivatives;    // space to store derivatives
  70. };
  71.  
  72. //===============================================================
  73. //
  74. //    idODE_RK4
  75. //
  76. //===============================================================
  77.  
  78. class idODE_RK4 : public idODE {
  79.  
  80. public:
  81.                         idODE_RK4( const int dim, const deriveFunction_t dr, const void *ud );
  82.     virtual                ~idODE_RK4( void );
  83.  
  84.     virtual float        Evaluate( const float *state, float *newState, float t0, float t1 );
  85.  
  86. protected:
  87.     float *                tmpState;
  88.     float *                d1;                // derivatives
  89.     float *                d2;
  90.     float *                d3;
  91.     float *                d4;
  92. };
  93.  
  94. //===============================================================
  95. //
  96. //    idODE_RK4Adaptive
  97. //
  98. //===============================================================
  99.  
  100. class idODE_RK4Adaptive : public idODE {
  101.  
  102. public:
  103.                         idODE_RK4Adaptive( const int dim, const deriveFunction_t dr, const void *ud );
  104.     virtual                ~idODE_RK4Adaptive( void );
  105.  
  106.     virtual float        Evaluate( const float *state, float *newState, float t0, float t1 );
  107.     void                SetMaxError( const float err );
  108.  
  109. protected:
  110.     float                maxError;        // maximum allowed error
  111.     float *                tmpState;
  112.     float *                d1;                // derivatives
  113.     float *                d1half;
  114.     float *                d2;
  115.     float *                d3;
  116.     float *                d4;
  117. };
  118.  
  119. #endif /* !__MATH_ODE_H__ */
  120.