Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_MATH_COMMON_H_
00010 #define _XNV_MATH_COMMON_H_
00011
00012 #include <math.h>
00013 #include <XnOS.h>
00014
00015 namespace XnVMathCommon
00016 {
00017
00018 inline void Exchange(XnFloat& a, XnFloat& b)
00019 {
00020 XnFloat c = a;
00021 a = b;
00022 b = c;
00023 }
00024
00025 inline void ExchangeSort(XnFloat& a, XnFloat& b)
00026 {
00027 if (a > b)
00028 Exchange(a, b);
00029 }
00030
00031 inline void ExchangeSort(XnFloat& a, XnFloat& b, XnFloat& c)
00032 {
00033 if (a > b)
00034 Exchange(a, b);
00035 if (b > c)
00036 Exchange(b, c);
00037 if (a > b)
00038 Exchange(a, b);
00039 }
00040
00041 inline XnFloat Sqr(XnFloat a)
00042 {
00043 return a*a;
00044 }
00045
00046 inline XnFloat Max(XnFloat a, XnFloat b)
00047 {
00048 return (a > b ? a : b);
00049 }
00050
00051 inline XnFloat Min(XnFloat a, XnFloat b)
00052 {
00053 return (a < b ? a : b);
00054 }
00055
00056 inline XnFloat MaxAbs(XnFloat a, XnFloat b)
00057 {
00058 return Max(fabs(a), fabs(b));
00059 }
00060
00061 inline XnFloat MinAbs(XnFloat a, XnFloat b)
00062 {
00063 return Min(fabs(a), fabs(b));
00064 }
00065
00066 inline XnUInt16 ArgMax(XnFloat a, XnFloat b)
00067 {
00068 return (a > b ? 0 : 1);
00069 }
00070
00071 inline XnUInt16 ArgMax(XnFloat a, XnFloat b, XnFloat c)
00072 {
00073 return (a > b ? (a > c ? 0 : 2) : (b > c ? 1 : 2));
00074 }
00075
00076 inline XnUInt16 ArgMin(XnFloat a, XnFloat b)
00077 {
00078 return ArgMax(-a, -b);
00079 }
00080
00081 inline XnUInt16 ArgMin(XnFloat a, XnFloat b, XnFloat c)
00082 {
00083 return ArgMax(-a, -b, -c);
00084 }
00085
00086 const XnFloat PI=3.14159265f;
00087 const XnFloat HALF_PI=(PI/2);
00088
00089 inline XnBool IsZero(XnFloat f, XnFloat fTolerance)
00090 {
00091 return fabs(f) < fTolerance;
00092 }
00093
00094 }
00095 #endif //_XNV_MATH_COMMON_H_