NITE 1.5.1 - API Reference

XnVMathCommon.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002 *                                                                              *
00003 *   PrimeSense NITE 1.3                                                        *
00004 *   Copyright (C) 2010 PrimeSense Ltd.                                         *
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_