00001
00002
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
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
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
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
00136
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 ;
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