(C++) Rescale
January 7, 2018 · View on GitHub
(C++) Rescale
Rescale is a math code snippet to rescale a double, 1D std::vector or 2D std::vector from a certain range to a new range.
Rescale on a double
#include <algorithm> #include <cassert> //From http://www.richelbilderbeek.nl/CppRescale.htm const double Rescale( const double value, const double oldMin, const double oldMax, const double newMin, const double newMax) { assert(value >= oldMin); assert(value <= oldMax); const double oldDistance = oldMax - oldMin; //At which relative distance is value on oldMin to oldMax ? const double distance = (value - oldMin) / oldDistance; assert(distance >= 0.0); assert(distance <= 1.0); const double newDistance = newMax - newMin; const double newValue = newMin + (distance * newDistance); assert(newValue >= newMin); assert(newValue <= newMax); return newValue; }
Rescale on a 1D std::vector
#include <algorithm> #include <cassert> #include <vector> //From http://www.richelbilderbeek.nl/CppRescale.htm const std::vector<double> Rescale( std::vector<double> v, const double newMin, const double newMax) { const double oldMin = *std::min_element(v.begin(),v.end()); const double oldMax = *std::max_element(v.begin(),v.end()); typedef std::vector<double>::iterator Iter; Iter i = v.begin(); const Iter j = v.end(); for ( ; i!=j; ++i) { *i = Rescale(*i,oldMin,oldMax,newMin,newMax); } return v; }
Rescale on a 2D std::vector
#include <algorithm> #include <cassert> #include <vector> //From http://www.richelbilderbeek.nl/CppRescale.htm const std::vector<std::vector<double> > Rescale( std::vector<std::vector<double> > v, const double newMin, const double newMax) { const double oldMin = MinElement(v); const double oldMax = MaxElement(v); typedef std::vector<std::vector<double> >::iterator RowIter; RowIter y = v.begin(); const RowIter maxy = v.end(); for ( ; y!=maxy; ++y) { typedef std::vector<double>::iterator ColIter; ColIter x = y->begin(); const ColIter maxx = y->end(); for ( ; x!=maxx; ++x) { *x = Rescale(*x,oldMin,oldMax,newMin,newMax); } } return v; }