-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathttMath.h
More file actions
130 lines (97 loc) · 1.8 KB
/
ttMath.h
File metadata and controls
130 lines (97 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* ttMath.h
* Created by Seung-Chan Kim on 6/28/11.
* Copyright 2011 Disney Research, Pittsburgh. All rights reserved.
*/
#ifndef TT_MATH2_H
#define TT_MATH2_H
#ifdef __cplusplus
namespace DD {
template <typename T>
inline void GetAvg(const T* arr, const int szarr, T& vavg)
{
int i;
T vsum= (T) 0;
for(i=0; i< szarr; i++)
{
vsum += arr[i];
}
vsum = vsum / (float) szarr; // check !
vavg = vsum;
}
template <typename T>
inline void GetVariance(const T* arr, const int szarr, T& vvariance)
{
T vavg;
GetAvg<T>(arr, szarr,vavg);
T tempsum = (T) 0;
int i;
for(i=0; i< szarr; i++)
{
T temp = (vavg - arr[i]) * (vavg - arr[i]) ;
tempsum = tempsum + temp;
}
tempsum = tempsum / (float) szarr;
vvariance = tempsum;
}
template <typename T>
inline void GetMax(const T* arr, const int szarr, T& vmax, int& arrID)
{
int i;
T vtmp=-99999;
int idtmp = -1;
for(i=0; i< szarr; i++)
{
if(arr[i] >vtmp)
{
vtmp = arr[i];
idtmp = i;
}
}
vmax = vtmp;
arrID = idtmp;
}
template <typename T>
inline void GetMin(const T* arr, const int szarr, T& vmin, int& arrID)
{
int i;
T vtmp=99999;
int idtmp = -1;
for(i=0; i< sz; i++)
{
if(arr[i] <vtmp)
{
vtmp = arr[i];
idtmp = i;
}
}
vmin = vtmp;
arrID = idtmp;
}
// added 2013/2/16 @CHAUD 1186
template <typename T>
inline T Clamp(const T &val, const T &MIN, const T &MAX)
{
if (val < MIN) return MIN;
if (val > MAX) return MAX;
return val;
}
template <typename T>
inline T Round(const T &val)
{
return floor(val + 0.5);
}
template <typename T>
inline T AbsValue(const T &val)
{
if (val < 0) return -val;
return val;
}
template <typename T>
inline bool IsEqual(const T &v0, const T &v1, const T epsilon = 1E-9)
{
return (AbsValue(v0 - v1) <= epsilon);
}
#endif /* __cplusplus */
}
#endif