As I said in comment, exponent fits quite well:
double mBase = 5; // higher = more "curvy"
double minY = pow(mBase, mMin - mBase);
double maxY = pow(mBase, mMax - mBase);
double scale = (mMax - mMin) / (maxY - minY);
double shift = mMin - minY;
return pow(mBase, mFactor - mBase) * scale + shift;
Ugh, slope is all wrong, ugly hack...