math/math2.h

Go to the documentation of this file.
00001 //-------------------------------------------------------------------
00002 // Math2.h
00003 //-------------------------------------------------------------------
00004 #ifndef MATH2_H_
00005 #define MATH2_H_ 1
00006 
00007 #include "debug/debug.h"
00008 #include <math.h>
00009 
00010 //-definitions-------------------------------------------------------
00011 #ifndef M_PI
00012 #define M_PI    3.14159265359
00013 #endif
00014 
00015 #define ROUNDING_ERROR  (1e-5)
00016 #define IsZero(x)       (fabs(x)<ROUNDING_ERROR)
00017 
00018 //-function-prototypes-----------------------------------------------
00019 template< class T >    bool Between( const T value, const T left, const T right );
00020 double  Clamp( const double value, const double min, const double max );
00021 double  CosDeg( const double value );
00022 template< class T >    T Max( const T a, const T b );
00023 double  Max( const double a, const double b, const double c );
00024 double  Max( const double a, const double b, const double c, const double d );
00025 double  Max( const double a, const double b, const double c, const double d, const double e );
00026 template< class T >    T Min( const T a, const T b );
00027 double  Min( const double a, const double b, const double c );
00028 double  Min( const double a, const double b, const double c, const double d );
00029 double  MinMag( const double a, const double b );
00030 double  MinMag( const double a, const double b, const double c );
00031 template< class T >    T OddOneOut( const T a, const T b, const T c );
00032 int     Pow( const int a, const int b );
00033 double  Rad2Deg( const double radians );
00034 double  Deg2Rad( const double degrees );
00035 double  RandNorm( const double mean, const double standard_devation );
00036 double  SinDeg( const double value );
00037 double  Sqr( const double a );
00038 int     TwoToThePower( const int power );
00039 
00040 
00041 template< class T >    
00042 bool Between( const T value, const T left, const T right )
00043 {
00044     if( value < math::Min( left, right ) ) return false;
00045     if( value > math::Max( left, right ) ) return false;
00046     return true;
00047 }
00048 
00049 namespace math
00050 {
00051     template< class T >    
00052     inline T Max( const T a, const T b )
00053     {
00054         if( a > b ) return a;
00055         return b;
00056     }
00057 
00058     template< class T >    
00059     inline T Min( const T a, const T b )
00060     {
00061         if( a < b ) return a;
00062         return b;
00063     }
00064 }
00065 
00066 template< class T >
00067 T OddOneOut( const T a, const T b, const T c )
00068 {
00069     if( a == b )
00070     {
00071         return c;
00072     }
00073 
00074     if( b == c )
00075     {
00076         return a;
00077     }
00078 
00079     if( c == a )
00080     {
00081         return b;
00082     }
00083     IJG_Assert( false );
00084     return a;
00085 }
00086 
00087 
00088 
00089 #endif

Generated on Sat Apr 1 21:30:38 2006 for Motion Planning Kernel by  doxygen 1.4.6-NO