VR-Link API Documentation for HLA 1516
Home
Namespaces
Classes
Files
Examples
Libraries
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
include
matrix
vlMath.h
Go to the documentation of this file.
1
/*********************************************************************
2
** Copyright (c) 1992-2010 VT MAK
3
** All rights reserved.
4
*********************************************************************/
5
6
7
#ifndef vlMath_H
8
#define vlMath_H
9
14
15
#if !defined(_WIN32) && !defined(VXWORKS)
16
#include <sys/param.h>
17
#endif
18
19
20
#include <
vlutil/vlMachineTypes.h
>
21
#include <math.h>
22
#include <
vlutil/vlExceptions.h
>
23
24
#ifdef DtUSE_UTILITIES_NAMESPACE
25
namespace
DtUSE_UTILITIES_NAMESPACE
26
{
27
#endif
28
31
#define DtEPico 1.0E-12
32
#define DtENano 1.0E-09
33
#define DtEMicro 1.0E-06
34
#define DtEMilli 1.0E-03
35
#define DtECenti 1.0E-02
36
#define DtEDeci 1.0E-01
37
#define DtEHalf 5.0E-01
38
#define DtENineTenths 9.0E-01
39
#define DtEOne 1.0
40
#define DtEDeca 1.0E01
41
#define DtEHecto 1.0E02
42
#define DtEKilo 1.0E03
43
#define DtEMega 1.0E06
44
#define DtEGiga 1.0E09
45
47
#define DtEq(x, y, e) ((DtAbs((x) - (y)) <= (e)) ? true : false)
48
49
#define M_2PI 6.28318530717958647693
/* 2Pi */
50
51
#ifndef __darwin__
52
#define M_E 2.7182818284590452354
/* Euler constant "e" */
53
#define M_1_E 0.36787944117144232160
/* 1/e */
54
#define M_LN2 0.69314718055994530942
/* ln(2) */
55
#define M_LN10 2.30258509299404568402
/* ln(10) */
56
#define M_LOG2E 1.4426950408889634074
/* log2(e) = 1/ln(2) */
57
#define M_LOG10E 0.43429448190325182765
/* log10(e) = 1/ln(10) */
58
#define M_PI 3.14159265358979323846
/* Pythagorean constant "Pi" */
59
#define M_PI_2 1.57079632679489661923
/* Pi/2 */
60
#define M_PI_3 1.04719755119659774615
/* Pi/3 */
61
#define M_PI_4 0.78539816339744830962
/* Pi/4 */
62
#define M_1_PI 0.31830988618379067154
/* 1/Pi */
63
#define M_2_PI 0.63661977236758134308
/* 2/Pi */
64
#define M_3_PI 0.954929658551372014613
/* 3/Pi */
65
#define M_4_PI 1.27323954473516268615
/* 4/Pi */
66
#define M_SQRTPI 1.77245385090551602730
/* Sqrt(Pi) */
67
#define M_1_SQRTPI 0.564189583547756286948
/* 1/Sqrt(Pi) */
68
#define M_2_SQRTPI 1.12837916709551257390
/* 2/Sqrt(Pi) */
69
#define M_3_SQRTPI 1.69256875064326886084
/* 3/Sqrt(Pi) */
70
#define M_4_SQRTPI 2.25675833419102514779
/* 4/Sqrt(Pi) */
71
#define M_SQRT2PI 2.50662827463100050242
/* Sqrt(2Pi) */
72
#define M_1_SQRT2PI 0.39894228040143267794
/* 1/Sqrt(2Pi) */
73
#define M_RAD2DEG 57.2957795130823208768
/* 180/Pi radians --> degrees */
74
#define M_DEG2RAD 0.0174532925199432957692
/* Pi/180 degrees --> radians */
75
#define M_SQRT2 1.41421356237309504880
/* Sqrt(2) */
76
#define M_SQRT_2 0.707106781186547524401
/* 1/Sqrt(2) */
77
#define M_GOLDEN_R 0.6180339887498948482046
/* GoldenRatio: (Sqrt(5) - 1)/2 */
78
#endif
79
81
inline
DT_DLL_MATRIX
double
DtRad2Deg
(
double
rad)
82
{
83
return
((rad /
M_PI
) * 180.0);
84
}
85
87
inline
DT_DLL_MATRIX
double
DtDeg2Rad
(
double
deg)
88
{
89
return
((deg *
M_PI
) / 180.0);
90
}
91
93
template
<
typename
T>
94
T
DtAbs
(T x)
95
{
96
return
(((x) >= 0) ? (x) : (-(x)));
97
}
98
100
template
<
typename
T>
101
int
DtSgn
(T x)
102
{
103
return
(((x) >= 0) ? 1 : -1);
104
}
105
107
template
<
typename
T>
108
T
DtPos
(T x)
109
{
110
return
(((x) >= 0) ? (x) : 0);
111
}
112
114
template
<
typename
T>
115
T
DtNeg
(
const
T&val)
116
{
117
if
(val >= 0)
return
0;
118
else
return
val;
119
}
120
122
template
<
typename
T>
123
T
DtSquare
(
const
T& val)
124
{
125
return
val * val;
126
}
127
129
template
<
typename
T>
130
T
DtLimit
(T x,T lo ,T hi)
131
{
132
if
(lo > hi)
133
{
135
return
DtLimit
(x,hi,lo);
136
}
137
if
(x > hi)
138
{
139
return
hi;
140
}
141
if
(x < lo)
142
{
143
return
lo;
144
}
145
return
x;
146
}
147
149
template
<
typename
T>
150
inline
T
DtMod
(T a, T b)
151
{
152
return
a % b;
153
}
154
156
template
<>
157
inline
float
DtMod
(
float
a,
float
b)
158
{
159
return
(
float
)fmod((
float
)a,(
float
)b);
160
}
161
163
template
<>
164
inline
double
DtMod
(
double
a,
double
b)
165
{
166
return
fmod(a,b);
167
}
168
170
template
<
typename
T>
171
T
DtGCD
(T a, T b)
172
{
173
if
(a == 0)
DtTHROW_NEW
(
DtInvalidInput
,
"Can't divide by zero"
);
174
if
(b == 0)
DtTHROW_NEW
(
DtInvalidInput
,
"Can't divide by zero"
);
175
while
(
true
)
176
{
177
a =
DtMod
(a,b);
178
if
( a == 0 )
return
b;
179
b =
DtMod
(b,a);
180
if
( b == 0 )
return
a;
181
}
182
}
183
185
template
<
typename
T>
186
T
DtLCM
(T a,T b)
187
{
188
if
(a == 0)
DtTHROW_NEW
(
DtInvalidInput
,
"Can't divide by zero"
);
189
if
(b == 0)
DtTHROW_NEW
(
DtInvalidInput
,
"Can't divide by zero"
);
190
return
(a * b) /
DtGCD
(a,b);
191
}
192
193
#ifdef DtUSE_UTILITIES_NAMESPACE
194
}
195
#endif
196
#endif
197
Document ID: Generated on Tue Mar 1 02:56:17 EST 2016 from SVN revision 162687
Copyright © 2005-2014 VT MÄK. All Rights Reserved (
www.mak.com
)