00001
00002 #ifndef __mathutils_h__
00003 #define __mathutils_h__
00004
00005 #include <math.h>
00006
00007 namespace mathutils {
00008 template <class num>
00009 inline num squareDistance(num x1, num ya, num x2, num yb) {
00010 return (x1-x2)*(x1-x2)+(ya-yb)*(ya-yb);
00011 }
00012
00013 template <class num>
00014 inline num distance(num x1, num ya, num x2, num yb) {
00015 return sqrt(squareDistance(x1, ya, x2, yb));
00016 }
00017
00018 template <class num>
00019 inline num limitRange(num n, num low, num high) {
00020 if (n<low) n=low;
00021 if (n>high) n=high;
00022 return n;
00023 }
00024
00025 template <class num>
00026 inline num squared(num n) {
00027 return n*n;
00028 }
00029
00030 template <class num>
00031 inline num abs_t(num n) {
00032 return (n>-n)?n:-n;
00033 }
00034
00035 template <class num>
00036 inline num log2t(num x) {
00037 num ans=0;
00038 for(unsigned int mag=sizeof(num)*4; mag>0; mag/=2) {
00039 num y=x>>mag;
00040 if(y>0) {
00041 x=y;
00042 ans+=mag;
00043 }
00044 }
00045 return ans;
00046 }
00047 template <>
00048 inline float log2t(float x) {
00049 return log(x)/M_LN2;
00050 }
00051 template <>
00052 inline double log2t(double x) {
00053 return log(x)/M_LN2;
00054 }
00055 }
00056
00057 #endif