VR-Link API Documentation for HLA 1516
Home
Namespaces
Classes
Files
Examples
Libraries
File List
File Members
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 Wed Aug 14 15:35:11 EDT 2013 from SVN revision 130445
Copyright © 2005-2013 VT MÄK. All Rights Reserved (
www.mak.com
)