static double transformBetweenDoubleRanges(double x, DoubleRange src, DoubleRange dest) { ret dest.start+dest.length()*doubleRatio(x-src.start, src.length()); } static DoubleRange transformBetweenDoubleRanges(DoubleRange r, DoubleRange src, DoubleRange dest) { ret r == null ?: DoubleRange(transformBetweenDoubleRanges(r.start, src, dest), transformBetweenDoubleRanges(r.end, src, dest)); }