VR-Link API Documentation for HLA 1.3
vlMath.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 *********************************************************************/
00005 
00006 
00007 #ifndef vlMath_H
00008 #define vlMath_H
00009 
00014 
00015 #if !defined(_WIN32) && !defined(VXWORKS)
00016 #include <sys/param.h>
00017 #endif
00018 
00019 
00020 #include <vlutil/vlMachineTypes.h>  
00021 #include <math.h>
00022 #include <vlutil/vlExceptions.h>
00023 
00024 #ifdef DtUSE_UTILITIES_NAMESPACE
00025 namespace DtUSE_UTILITIES_NAMESPACE
00026 {
00027 #endif
00028 
00031 #define DtEPico         1.0E-12
00032 #define DtENano         1.0E-09
00033 #define DtEMicro        1.0E-06
00034 #define DtEMilli        1.0E-03
00035 #define DtECenti        1.0E-02
00036 #define DtEDeci         1.0E-01
00037 #define DtEHalf         5.0E-01
00038 #define DtENineTenths   9.0E-01
00039 #define DtEOne          1.0
00040 #define DtEDeca         1.0E01
00041 #define DtEHecto        1.0E02
00042 #define DtEKilo         1.0E03
00043 #define DtEMega         1.0E06
00044 #define DtEGiga         1.0E09
00045 
00047 #define DtEq(x, y, e)        ((DtAbs((x) - (y)) <= (e)) ? true : false)
00048 
00049 #define M_2PI       6.28318530717958647693   /* 2Pi                           */
00050 
00051 #ifndef __darwin__
00052 #define M_E         2.7182818284590452354    /* Euler constant "e"            */
00053 #define M_1_E       0.36787944117144232160   /* 1/e                           */
00054 #define M_LN2       0.69314718055994530942   /* ln(2)                         */
00055 #define M_LN10      2.30258509299404568402   /* ln(10)                        */
00056 #define M_LOG2E     1.4426950408889634074    /* log2(e)  = 1/ln(2)            */
00057 #define M_LOG10E    0.43429448190325182765   /* log10(e) = 1/ln(10)           */
00058 #define M_PI        3.14159265358979323846   /* Pythagorean constant "Pi"     */
00059 #define M_PI_2      1.57079632679489661923   /* Pi/2                          */
00060 #define M_PI_3      1.04719755119659774615   /* Pi/3                          */
00061 #define M_PI_4      0.78539816339744830962   /* Pi/4                          */
00062 #define M_1_PI      0.31830988618379067154   /* 1/Pi                          */
00063 #define M_2_PI      0.63661977236758134308   /* 2/Pi                          */
00064 #define M_3_PI      0.954929658551372014613  /* 3/Pi                          */
00065 #define M_4_PI      1.27323954473516268615   /* 4/Pi                          */
00066 #define M_SQRTPI    1.77245385090551602730   /* Sqrt(Pi)                      */
00067 #define M_1_SQRTPI  0.564189583547756286948  /* 1/Sqrt(Pi)                    */
00068 #define M_2_SQRTPI  1.12837916709551257390   /* 2/Sqrt(Pi)                    */
00069 #define M_3_SQRTPI  1.69256875064326886084   /* 3/Sqrt(Pi)                    */
00070 #define M_4_SQRTPI  2.25675833419102514779   /* 4/Sqrt(Pi)                    */
00071 #define M_SQRT2PI   2.50662827463100050242   /* Sqrt(2Pi)                     */
00072 #define M_1_SQRT2PI 0.39894228040143267794   /* 1/Sqrt(2Pi)                   */
00073 #define M_RAD2DEG   57.2957795130823208768   /* 180/Pi  radians --> degrees   */
00074 #define M_DEG2RAD   0.0174532925199432957692 /* Pi/180  degrees --> radians   */
00075 #define M_SQRT2     1.41421356237309504880   /* Sqrt(2)                       */
00076 #define M_SQRT_2    0.707106781186547524401  /* 1/Sqrt(2)                     */
00077 #define M_GOLDEN_R  0.6180339887498948482046 /* GoldenRatio: (Sqrt(5) - 1)/2  */
00078 #endif
00079 
00081 inline DT_DLL_MATRIX double  DtRad2Deg(double rad)
00082 {
00083    return ((rad / M_PI) * 180.0);
00084 }
00085 
00087 inline  DT_DLL_MATRIX double  DtDeg2Rad(double deg) 
00088 {
00089    return ((deg * M_PI) / 180.0);
00090 }
00091 
00093 template<typename T>
00094 T DtAbs(T x)
00095 {
00096    return  (((x) >= 0) ? (x) : (-(x)));
00097 }
00098 
00100 template<typename T>
00101 int DtSgn(T x)
00102 {
00103    return (((x) >= 0) ? 1 : -1);
00104 }
00105 
00107 template<typename T>
00108 T DtPos(T x)
00109 {
00110    return (((x) >= 0) ? (x) : 0);
00111 }
00112 
00114 template <typename T>
00115 T DtNeg(const T&val)
00116 {
00117    if (val >= 0) return 0;
00118    else return val;
00119 }
00120 
00122 template <typename T>
00123 T DtSquare(const T& val)
00124 {
00125    return val * val;
00126 }
00127 
00129 template <typename T>
00130 T DtLimit(T x,T lo ,T hi)
00131 {     
00132    if(lo > hi)
00133    {     
00135       return DtLimit(x,hi,lo);
00136    }     
00137    if(x > hi)
00138    {  
00139       return hi;
00140    }
00141    if(x < lo)
00142    {  
00143       return lo;
00144    }     
00145    return x;
00146 }
00147 
00149 template <typename T>
00150 inline T DtMod(T a, T b)
00151 {
00152    return a % b;
00153 }
00154 
00156 template <>
00157 inline float DtMod(float a, float b)
00158 {
00159    return (float)fmod((float)a,(float)b);
00160 }
00161 
00163 template <>
00164 inline double DtMod(double a,double b)
00165 {
00166    return fmod(a,b);
00167 }
00168 
00170 template <typename T>
00171 T DtGCD(T a, T b)
00172 {
00173    if(a == 0) DtTHROW_NEW(DtInvalidInput,"Can't divide by zero");
00174    if(b == 0) DtTHROW_NEW(DtInvalidInput,"Can't divide by zero");   
00175    while( true )
00176    {
00177       a = DtMod(a,b);
00178       if( a == 0 ) return b;
00179       b = DtMod(b,a);
00180       if( b == 0 ) return a;
00181    }
00182 }
00183 
00185 template <typename T>
00186 T DtLCM(T a,T b)
00187 {
00188    if(a == 0) DtTHROW_NEW(DtInvalidInput,"Can't divide by zero");
00189    if(b == 0) DtTHROW_NEW(DtInvalidInput,"Can't divide by zero");
00190    return (a * b) / DtGCD(a,b);
00191 }
00192 
00193 #ifdef DtUSE_UTILITIES_NAMESPACE
00194 }
00195 #endif
00196 #endif
00197 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)