00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef VEE_MATH_H
00021 #define VEE_MATH_H
00022
00023 template <class T>
00024 inline T VEE_abs(T x1)
00025 {
00026 return (x1 < 0) ? -x1 : x1;
00027 }
00028
00029 template <class T>
00030 inline T VEE_min(T x1, T x2)
00031 {
00032 return (x1 < x2) ? x1 : x2;
00033 }
00034
00035 template <class T>
00036 inline T VEE_max(T x1, T x2)
00037 {
00038 return (x1 > x2) ? x1 : x2;
00039 }
00040
00041 template <class T>
00042 inline T VEE_min(T x1, T x2, T x3)
00043 {
00044 T x = x1 < x2 ? x1 : x2;
00045 return x < x3 ? x : x3;
00046 }
00047
00048 template <class T>
00049 inline T VEE_max(T x1, T x2, T x3)
00050 {
00051 T x = x1 > x2 ? x1 : x2;
00052 return x > x3 ? x : x3;
00053 }
00054
00055 template <class T>
00056 inline T VEE_clamp(T v, T vmin, T vmax)
00057 {
00058 if(v < vmin) return vmin;
00059 if(v > vmax) return vmax;
00060 return v;
00061 }
00062
00063 template <class T>
00064 inline T VEE_absClamp(T v, T vmin, T vmax)
00065 {
00066 if(VEE_abs(v) < vmin) return v > (T) 0 ? vmin : -vmin;
00067 if(VEE_abs(v) > vmax) return v > (T) 0 ? vmax : -vmax;
00068 return v;
00069 }
00070
00071 template <class T>
00072 inline int VEE_round(T v)
00073 {
00074 if(v < 0) return (int) (v - 0.5);
00075 return (int) (v + 0.5);
00076 }
00077
00078 template <class T>
00079 inline int VEE_floor(T v)
00080 {
00081 if(v < 0) return (int) (v - (T) 0.999999);
00082 return (int) v;
00083 }
00084
00085 template <class T>
00086 inline int VEE_ceil(T v)
00087 {
00088 if(v > 0) return (int) (v + (T) 0.999999);
00089 return (int) v;
00090 }
00091
00092
00093 #define VEE_PI 3.1415926535897931
00094 #define VEE_TWO_PI 6.2831853071795862
00095 #define VEE_HALF_PI 1.57079632679489660
00096 #define VEE_QUARTER_PI 0.78539816339744828
00097
00098 template <class T>
00099 T VEE_deg2rad(T v) { return v / (T) 360 * (T) VEE_TWO_PI; }
00100
00101 template <class T>
00102 T VEE_rad2deg(T v) { return v / (T) VEE_TWO_PI * (T) 360.0; }
00103
00104 template <class T>
00105 T VEE_checkRadianRange(T v)
00106 {
00107 if(v > (T) VEE_TWO_PI)
00108 return v - VEE_TWO_PI;
00109 if(v < (T) -VEE_TWO_PI)
00110 return v + VEE_TWO_PI;
00111
00112 return v;
00113 }
00114
00115 #endif