diff options
Diffstat (limited to 'qfunctionconfigurator/functionconfig.cpp')
-rw-r--r-- | qfunctionconfigurator/functionconfig.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/qfunctionconfigurator/functionconfig.cpp b/qfunctionconfigurator/functionconfig.cpp index a0715754..70393246 100644 --- a/qfunctionconfigurator/functionconfig.cpp +++ b/qfunctionconfigurator/functionconfig.cpp @@ -24,8 +24,12 @@ Map::Map() : float Map::getValue(float x) { QMutexLocker foo(&_mutex); - int x2 = x * (double) MEMOIZE_PRECISION; - float ret = getValueInternal(x2); + float q = x * MEMOIZE_PRECISION; + int xi = (int)q; + float yi = getValueInternal(xi); + float yiplus1 = getValueInternal(xi+1); + float f = (q-xi); + float ret = yiplus1 * f + yi * (1.0f - f); // at least do a linear interpolation. last_input_value.setX(x); last_input_value.setY(ret); return ret; @@ -45,7 +49,7 @@ float Map::getValueInternal(int x) { if (sz == 0) ret = 0; else - ret = cur.data[std::max(std::min(x, sz-1), 0)]; + ret = cur.data[std::min<unsigned>(x, sz-1)]; return ret * sign; } |