CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_MATH_HPP) 00007 #else 00008 #define XBASE_INCLUDED_MATH_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/BuiltInTypes.hpp> 00012 #include <XBase/RuntimeAssert.hpp> 00013 00014 //------------------------------------------------------------ 00015 namespace XBase { 00016 class Angle; 00017 } 00018 00019 //------------------------------------------------------------ 00020 namespace XBase { 00022 00023 00027 struct Math 00028 { 00029 //============================================================ 00031 00032 00034 template< typename T > 00035 static const T Min( const T aA1 , const T aA2 ) 00036 { 00037 return aA1 < aA2 ? aA1 : aA2; 00038 } 00039 00041 template< typename T > 00042 static const T Max( const T aA1 , const T aA2 ) 00043 { 00044 return aA1 < aA2 ? aA2 : aA1; 00045 } 00046 00048 00049 //============================================================ 00051 00052 00053 static f32 AbsF32( f32 aVal ) 00054 { 00055 return aVal < 0 ? -1.0f * aVal : aVal; 00056 } 00058 static s32 AbsS32( s32 aVal ) 00059 { 00060 return aVal < 0 ? -1 * aVal : aVal; 00061 } 00063 00064 //============================================================ 00066 00067 00074 static f32 ClampF32( f32 aMin , f32 aValue , f32 aMax ); 00075 00080 static bool IsInRangeF32( f32 aMin , f32 aValue , f32 aMax ); 00082 00083 //============================================================ 00085 00086 static bool IsEqualsF32( f32 value1 , f32 value2 ); 00087 static bool IsLessEqualsF32( const f32 lhs , const f32 rhs ); 00088 static bool IsLessF32( const f32 lhs , const f32 rhs ); 00089 static bool IsZeroF32( const f32 ); 00090 00091 00092 //============================================================ 00094 00095 static f32 SinF32( const Angle& ); 00096 static f32 CosF32( const Angle& ); 00097 static f32 TanF32( const Angle& ); 00098 static f32 CecF32( const Angle& ); 00099 static f32 SecF32( const Angle& ); 00100 static f32 CotF32( const Angle& ); 00101 00102 00103 //============================================================ 00105 00106 static f32 SqrtF32( f32 val ); 00107 00108 00109 //============================================================ 00111 00112 static f32 CeilF32( f32 val ); 00113 static f32 FloorF32( f32 val ); 00114 00115 00116 //============================================================ 00118 00119 00126 template< typename T > 00127 static const T Interpolation( const T& aVal1 , const T& aVal2 , const f32 aRate ) 00128 { 00129 XBASE_RANGE_ASSERT_EMIN_EMAX( 0.0f , aRate , 1.0f ); 00130 return aVal1 + ( aVal2 - aVal1 ) * aRate; 00131 } 00133 }; 00135 00136 } 00137 //------------------------------------------------------------ 00138 #endif 00139 // EOF