include/crbn/basic/scalar.hpp

00001 
00002 #ifndef __scalar_hpp__
00003 #define __scalar_hpp__
00004 
00005 #include <math.h>
00006 
00007 #include <crbn/basic/basic.h>
00008 
00009 inline float sqr( float f )
00010 {
00011   return f * f;
00012 }
00013 
00014 inline float radians( float x )
00015 {
00016   return 0.0174532925199432957692369076848f * x;
00017 }
00018 
00019 inline float degrees( float x )
00020 {
00021   return 57.295779513082320876798154814114f * x;
00022 }
00023 
00024 inline float sign( float x )
00025 {
00026   return (x>0.0f)?1.0f:((x<0.0f)?-1.0f:0.0f);
00027 }
00028 
00029 inline int32 sign( int32 x )
00030 {
00031   return (x>0)?1:((x<0)?-1:0);
00032 }
00033 
00034 inline float floor( float x )
00035 {
00036   return (float)( (int)x - (x < 0.0f) );
00037 }
00038 
00039 inline float ceil( float x )
00040 {
00041   return (int)x + ( (x > 0.0f) && (x != (int)x) );
00042 }
00043 
00044 inline float fract( float x )
00045 {
00046   return x - floor( x );
00047 }
00048 
00049 inline float min( float x, float y )
00050 {
00051   return (x<y)?x:y;
00052 }
00053 
00054 inline int32 min( int32 x, int32 y )
00055 {
00056   return (x<y)?x:y;
00057 }
00058 
00059 inline float max( float x, float y )
00060 {
00061   return (x>y)?x:y;
00062 }
00063 
00064 inline int32 max( int32 x, int32 y )
00065 {
00066   return (x>y)?x:y;
00067 }
00068 
00069 inline float clamp( float x, float minVal, float maxVal )
00070 {
00071   return (x>maxVal)?maxVal:((x<minVal)?minVal:x);
00072 }
00073 
00074 inline float step( float a, float x )
00075 {
00076   return (float)( x >= a );
00077 }
00078 
00079 inline float pulse( float a, float b, float x )
00080 {
00081   return step( a ,x ) - step( b, x );
00082 }
00083 
00084 inline float lerp( float t, float a, float b )
00085 {
00086   return a + t * (b - a);
00087 }
00088 
00089 inline float boxstep( float a, float b, float x )
00090 {
00091   return clamp( ( x - a ) / ( b - a ), 0.0f, 1.0f );
00092 }
00093 
00094 inline float smoothstep( float a, float b, float x )
00095 {
00096   if( x < a )
00097     return 0.0f;
00098   if( x > b )
00099     return 1.0f;
00100 
00101   x = ( x - a ) / ( b - a );
00102   return ( x * x * ( 3.0f - 2.0f * x ) );
00103 }
00104 
00105 inline float mod( float a, float b )
00106 {
00107   int32 n = (int32)( a / b );
00108 
00109   a -= n * b;
00110   if( a < 0 )
00111     a += b;
00112 
00113   return a;
00114 }
00115 
00116 #endif // __scalar_hpp__

Generated on Tue Nov 14 15:40:08 2006 for libcrbn by  doxygen 1.5.0