package utilities;

public class RangeMapper {

  // allows direct call to the static function,
  // or for greater convenience, simpler calls can be made
  // to an instantiated object

  public double omin, omax, nmin, nmax;

  public static double changeRange(double oval, double omin, double omax, double nmin, double nmax) {
    // normalise to zero .. one range
    double normVal = (oval - omin) / (omax - omin);
    // then map to new range
    return nmin + normVal * (nmax - nmin);
  }

  public RangeMapper() {
    this(0, 1, 0, 1);
  }

  public RangeMapper(double omin, double omax, double nmin, double nmax) {
    this.omin = omin;
    this.omax = omax;
    this.nmin = nmin;
    this.nmax = nmax;
  }

  public void setRange(double omin, double omax, double nmin, double nmax) {
    this.omin = omin;
    this.omax = omax;
    this.nmin = nmin;
    this.nmax = nmax;
  }

  public double map(double val) {
    double x = changeRange(val, omin, omax, nmin, nmax);
    // System.out.println(x);
    return x;
  }

  public double inverse(double val) {
    double x = changeRange(val, nmin, nmax, omin, omax);
    // System.out.println(x);
    return x;
  }



  public String toString() {
    return "RangeMapper: " + omin + " : " + omax + " : " + nmin +  " : " + nmax;
  }

}