-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFastMap.cpp
117 lines (86 loc) · 2.28 KB
/
FastMap.cpp
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
//
// FILE: FastMap.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.4.2
// PURPOSE: class with fast map function - library for Arduino
// URL: https://github.com/RobTillaart/FastMap
#include "FastMap.h"
///////////////////////////////////////////////////////////////
//
// FASTMAP
//
FastMap::FastMap()
{
init(0, 1, 0, 1);
}
bool FastMap::init(float in_min, float in_max, float out_min, float out_max)
{
float _inRange = in_max - in_min;
float _outRange = out_max - out_min;
if ((_inRange == 0.0 ) || (_outRange == 0.0)) return false;
_in_min = in_min;
_in_max = in_max;
_out_min = out_min;
_out_max = out_max;
_factor = _outRange/_inRange;
_base = _out_min - _in_min * _factor;
_backfactor = _inRange/_outRange;
_backbase = _in_min - _out_min * _backfactor;
return true;
}
float FastMap::constrainedMap(float value)
{
if (value <= _in_min) return _out_min;
if (value >= _in_max) return _out_max;
return this->map(value);
}
float FastMap::lowerConstrainedMap(float value)
{
if (value <= _in_min) return _out_min;
return this->map(value);
}
float FastMap::upperConstrainedMap(float value)
{
if (value >= _in_max) return _out_max;
return this->map(value);
}
///////////////////////////////////////////////////////////////
//
// FASTMAP_DOUBLE
//
FastMapDouble::FastMapDouble()
{
init(0, 1, 0, 1);
}
bool FastMapDouble::init(double in_min, double in_max, double out_min, double out_max)
{
double _inRange = in_max - in_min;
double _outRange = out_max - out_min;
if ((_inRange == 0.0 ) || (_outRange == 0.0)) return false;
_in_min = in_min;
_in_max = in_max;
_out_min = out_min;
_out_max = out_max;
_factor = _outRange/_inRange;
_base = _out_min - _in_min * _factor;
_backfactor = _inRange/_outRange;
_backbase = _in_min - _out_min * _backfactor;
return true;
}
double FastMapDouble::constrainedMap(double value)
{
if (value <= _in_min) return _out_min;
if (value >= _in_max) return _out_max;
return this->map(value);
}
double FastMapDouble::lowerConstrainedMap(double value)
{
if (value <= _in_min) return _out_min;
return this->map(value);
}
double FastMapDouble::upperConstrainedMap(double value)
{
if (value >= _in_max) return _out_max;
return this->map(value);
}
// -- END OF FILE --