$search
00001 00007 #ifndef P_MATH_HH 00008 #define P_MATH_HH 00009 00010 #include <limits.h> 00011 #include <time.h> 00012 #include <stdio.h> 00013 #include <stdlib.h> 00014 #include <blort/Recognizer3D/PNamespace.hh> 00015 #include <blort/Recognizer3D/Except.hh> 00016 00017 #ifdef WIN32 00018 #include <winsock.h> 00019 #else 00020 #include <sys/time.h> 00021 #endif 00022 00023 namespace P 00024 { 00025 00026 const unsigned UNDEF_ID = UINT_MAX; 00027 00028 const unsigned START = 0; 00029 const unsigned END = 1; 00030 const unsigned MID = 2; 00031 const unsigned ONE_THIRD = 3; 00032 const unsigned TWO_THIRD = 4; 00033 const unsigned STOP = 15; 00034 00035 inline unsigned OtherEnd(unsigned end) 00036 { 00037 return end ^ 0x1; 00038 } 00039 00040 // same and opposite sense 00041 const unsigned SAME = START; 00042 const unsigned OPP = END; 00043 00044 const unsigned LEFT = 0; 00045 const unsigned RIGHT = 1; 00046 const unsigned CAM3D = 2; 00047 00048 // inner and outer ends of junctions 00049 const unsigned INNER = 0; 00050 const unsigned OUTER = 1; 00051 00052 inline unsigned OtherSide(unsigned side) 00053 { 00054 return side ^ 0x1; 00055 } 00056 00057 inline unsigned Other(unsigned i) 00058 { 00059 return i ^ 0x1; 00060 } 00061 00063 extern bool IsZero(double d); 00064 00066 extern bool IsEqual(double a, double b); 00067 00069 template <class Num> 00070 extern Num Sqr(Num x); 00071 00072 template <class Num> 00073 extern Num Max(Num a, Num b); 00074 template <class Num> 00075 extern Num Min(Num a, Num b); 00076 00077 template <class Num> 00078 extern int Sign(Num x); 00079 00080 template <class T> 00081 inline void Swap(T &a, T &b); 00082 00083 template <class Num> 00084 inline bool Between(Num x, Num l, Num u); 00085 template <class Num> 00086 inline bool BetweenEq(Num x, Num l, Num u); 00087 00089 extern double ScaleAngle_0_2pi(double a); 00091 extern double ScaleAngle_mpi_pi(double a); 00093 extern double ScaleAngle_0_pi(double a); 00095 extern double DiffAngle_mpi_pi(double b, double a); 00097 extern double DiffAngle_0_2pi(double b, double a); 00099 extern int ScaleIntAngle_0_8(int a); 00100 00101 extern int timeval_subtract(struct timeval *result, struct timeval *x, 00102 struct timeval *y); 00103 extern double timespec_diff(struct timespec *x, struct timespec *y); 00104 00105 } 00106 00107 #include <blort/Recognizer3D/Math.ic> 00108 00109 #endif 00110