Scenario Manager UX Enhancement Design Notes
RiverWare 6.3 / edit 7-21-2012

Scale Slider Formula (slider value to scale)

Formula for "logarithmic" (actually, exponential) interpretation of the "Scale" slider, for providing values from (1/upper) to (upper) where "upper" is a user-provided upper scale value larger than 1. (e.g. 2 or 4).

#include <QSlider>
#include <math.h>  // pow() and log() functions
QSlider* scaleSlider = new QSlider();
static const int RangeLimit (1000); // must be even
scaleSlider->setRange (0, RangeLimit);

... 

const double sliderValue = scaleSlider->value(); // [0..RangeLimit]
const double sliderExp = ((2.0 * sliderValue / RangeLimit) - 1.0); // [-1..1]

// Scale Factor [1/scaleRangeTop .. scaleRangeTop]
const double scaleRangeTop = ...; // e.g. 2.0 for range 0.5 to 2.0 const double scale = pow (scaleRangeTop, sliderExp);

Inverse Scale Slider Formula (scale to slider value)

const double sliderExp = log (scale) / log (scaleRangeTop);
const double sliderValue = (sliderExp + 1.0) * RangeLimit * 0.5; 

---