math/math2.cpp

Go to the documentation of this file.
00001 //-------------------------------------------------------------------
00002 // Math2.cpp
00003 //-------------------------------------------------------------------
00004 #include "math2.h"
00005 #include <math.h>
00006 #include <stdlib.h>
00007 
00008 //-------------------------------------------------------------------
00009 double Clamp( const double value, const double min, const double max )
00010 {
00011     if( value < min ) return min;
00012     if( value > max ) return max;
00013     return value;
00014 }
00015 
00016 //-------------------------------------------------------------------
00017 double CosDeg( const double value )
00018 {
00019         return( cos( value / 180 * M_PI ) );
00020 };
00021 //-------------------------------------------------------------------
00022 double SinDeg( const double value ) 
00023 {
00024         return( sin( value / 180 * M_PI ) );
00025 }
00026 //-------------------------------------------------------------------
00027 double  Rad2Deg( const double radians )
00028 {
00029         return radians / M_PI * 180.0 ;
00030 };
00031 //-------------------------------------------------------------------
00032 double  Deg2Rad( const double degrees )
00033 {
00034         return (degrees / 180.0) * M_PI;
00035 };
00036 //-------------------------------------------------------------------
00037 double Max( const double a, const double b )
00038 {
00039         //IMPROVE: make these templates
00040         if( a > b )
00041         {
00042                 return a ;
00043         }
00044         return b ;
00045 };
00046 //-------------------------------------------------------------------
00047 double Min( const double a, const double b )
00048 {
00049         //IMPROVE: make these templates
00050         if( a < b )
00051         {
00052                 return a ;
00053         }
00054         return b ; 
00055 };
00056 //-------------------------------------------------------------------
00057 double Max( const double a, const double b, const double c )
00058 {
00059         return( Max( a, Max( b, c ) ) ) ;
00060 };
00061 //-------------------------------------------------------------------
00062 double  Max( const double a, const double b, const double c, const double d )
00063 {
00064         return Max( Max( a, b ), Max( c, d ) );
00065 }
00066 //-------------------------------------------------------------------
00067 double  Max( const double a, const double b, const double c, const double d, const double e )
00068 {
00069         return Max( Max( a, b, c ), Max( d, e ) );
00070 }
00071 //-------------------------------------------------------------------
00072 double Min( const double a, const double b, const double c )
00073 {
00074         return ( Min( a, Min( b, c ) ) ) ;
00075 };
00076 //-------------------------------------------------------------------
00077 double  Min( const double a, const double b, const double c, const double d )
00078 {
00079         return Min( Min( a, b ), Min( c, d ) );
00080 }
00081 //-------------------------------------------------------------------
00082 int     Min( const int a, const int b )
00083 {
00084     if( a < b )
00085     {
00086         return a;
00087     }
00088     else
00089     {
00090         return b;
00091     }
00092 }
00093 //-------------------------------------------------------------------
00094 unsigned int Min( const unsigned int a, const unsigned int b )
00095 {
00096     if( a < b )
00097     {
00098         return a;
00099     }
00100     else
00101     {
00102         return b;
00103     }
00104 }
00105 //-------------------------------------------------------------------
00106 double MinMag( const double a, const double b )
00107 {
00108         //IMPROVE: make these templates
00109         if( fabs(a) < fabs(b) )
00110         {
00111                 return a ;
00112         }
00113         return b ; 
00114 }
00115 //-------------------------------------------------------------------
00116 double MinMag( const double a, const double b, const double c )
00117 {
00118         return ( MinMag( a, MinMag( b, c ) ) );
00119 }
00120 //-------------------------------------------------------------------
00121 int Pow( const int a, const int b )
00122 {
00123     IJG_Assert( b >= 0 );
00124     int returnMe = 1;
00125     int i;
00126     for( i = 0; i < b; ++i )
00127     {
00128         returnMe *= a;
00129     }
00130     return returnMe;
00131 }
00132 //-------------------------------------------------------------------
00133 double RandNorm( const double mean, const double standard_devation )
00134 {
00135         // Normal Distribution, based on the crude model in the WinNT 3.5 manual:
00136         //   Normal = Mean + (-7 + Sum(14 Random Numbers [0..1])) * Standard Deviation
00137 
00138         const int numbers = 7;
00139 
00140         double sum = 0;
00141 
00142         for (int i = 0; i < (2*numbers); i++ )
00143         {
00144                 sum += double( rand() ) / RAND_MAX ; //this is a random number between [0..1]
00145         }
00146 
00147         return ( mean + (-numbers + sum )*standard_devation );
00148 }
00149 //-------------------------------------------------------------------
00150 double Sqr( const double a ) 
00151 {
00152         return a*a ;
00153 };
00154 //-------------------------------------------------------------------
00155 int TwoToThePower( const int power )
00156 {
00157     IJG_Assert( power >= 0 );
00158     IJG_Assert( power <= 31 );
00159     int returnMe = 1;
00160     returnMe <<= power;
00161     return returnMe;
00162 }
00163 //-------------------------------------------------------------------

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