blob: 0a7794178876e01d4ded57207885eb5f2da4f1a7 (
plain)
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
|
#include "instrument.hpp"
LookupTable::LookupTable()
{
m_Points = NULL;
m_nPoints = 0;
}
void LookupTable::set(double *points, int num_points)
{
// Note: Actual array size is 2*num_points
m_Points = points;
m_nPoints = num_points;
}
double LookupTable::getValue(double x)
{
// Note: Assumes points are monotonically increasing in X!
int i=0;
while (x>m_Points[i*2] && i<m_nPoints)
i++;
if (i==0)
return m_Points[1];
if (i>=m_nPoints)
return m_Points[(m_nPoints-1)*2+1];
double ratio =
(x - m_Points[(i-1)*2])
/ (m_Points[i*2] - m_Points[(i-1)*2]);
return m_Points[(i-1)*2+1]*(1-ratio) + m_Points[i*2+1]*(ratio);
}
|