What is a way to smoothly convert a number from $0$ to $100$ to a number from $0$ to $7$, with $1.75$ as the midpoint? I am working on a problem for some animation software I am writing. I came up with this function, working backward from a graph:
$0.8733\cdot \arctan \left(x^a\cdot -2.1855\right)+1$
The graph is viewable here:
https://www.desmos.com/calculator/zdmshghya8
The idea is that from time $0$ to time $1$, graphed on $x$, the value that I'm animating decays to zero, but in a smooth way that is pleasing to the eye, rather than linearly. By changing the value a, the smoothness can be biased toward the beginning or the end of the motion. So far so good.
The problem is that from a perceptual point of view, acceptable values for a are $0 <$*a*$ <= 7$, but a middle, balanced value for a is $1.75$. This is more easily understandable by looking at the graph. You'll notice that for *a*$ = 1.75$, an $x$ of around $0.5$ gives a $y$ of around $0.5$.
I want to present the user with the option to input a value for a between $0$ and $100$, and $50$ should map to the middle-looking value of $1.75$. But I am not sure how to do this - I'm sure it's obvious from this post that I am not at all versed in math. 
For the moment I am doing this, but I am sure this is a naive way to do it, and will lead to a hiccup for values around $50$ input by the user:
if (f >= 0 && f <= 50)
    return (f * 1.75) / 50;
else if (f > 50 && f <=100)
    return 2 * (f/50) * 1.75;

 A: Well, $1.75/7 = 0.25$, and $50/100 = 0.5$, and $0.5^2 = 0.25$, so you can do something like:
$f(x)= 7*\dfrac {x^2} {100^2}$
It satisfies the following statements:


*

*$f(0) = 0$

*$f(50) = 1.75$

*$f(100) = 7$


Plot from 0 to 100:

A: You can consider an equation like
$$
f(a) = A a^2 + B a + C 
$$
and find the parameters $A$, $B$ and $C$ so that $f(0)=0$, $f(100)=7$ and $f(50)=1.75$.
A: You can use Spline Interpolation, which yields a continuous 3rd-degree polynomial function.
The function is guaranteed to be twice-differentiable (f, f' and f'' are viable functions).
This attribute will effectively give a "smooth appearance" to the original function.
Here is the function for your specific three points $(0,0),(50,1.75),(100,7)$:
$
 f(x)=
 \begin{cases}
  0.000007x^3 + 0.0175x                                  & \text{$ 0 \leq x \leq  50$}\\
 -0.000007(x-50)^3 + 0.00105(x-50)^2 + 0.07(x-50) + 1.75 & \text{$50 \leq x \leq 100$}
 \end{cases}
$

Here is a piece of C code for any given three points $(x_0,y_0),(x_1,y_1),(x_2,y_2)$:
void Spline(double x[3],double y[3], // input
            double A[2],double B[2], // output
            double C[2],double D[2]) // output
{
    double w[2];
    double h[2];
    double ftt[3];

    w[0] = (x[1]-x[0]);
    w[1] = (x[2]-x[1]);

    h[0] = (y[1]-y[0])/w[0];
    h[1] = (y[2]-y[1])/w[1];

    ftt[0] = 0;
    ftt[1] = 3*(h[1]-h[0])/(w[1]+w[0]);
    ftt[2] = 0;

    A[0] = (ftt[1]-ftt[0])/(6*w[0]);
    A[1] = (ftt[2]-ftt[1])/(6*w[1]);

    B[0] = ftt[0]/2;
    B[1] = ftt[1]/2;

    C[0] = h[0]-w[0]*(ftt[1]+2*ftt[0])/6;
    C[1] = h[1]-w[1]*(ftt[2]+2*ftt[1])/6;

    D[0] = y[0];
    D[1] = y[1];

    printf("%f <= x <= %f : f(x) = %f(x-%f)^3 + %f(x-%f)^2 + %f(x-%f) + %f\n"
           ,x[0],x[1],A[0],x[0],B[0],x[0],C[0],x[0],D[0]);

    printf("%f <= x <= %f : f(x) = %f(x-%f)^3 + %f(x-%f)^2 + %f(x-%f) + %f\n"
           ,x[1],x[2],A[1],x[1],B[1],x[1],C[1],x[1],D[1]);
}

Please note that the above code assumes $x_0 < x_1 < x_2$.
Here is a piece of C code for any given number of points $(x_0,y_0),(x_1,y_1),...,(x_N,y_N)$:
void Spline(double x[N+1],double y[N+1], // input
            double A[N],double B[N],     // output
            double C[N],double D[N])     // output
{
    int i;

    double w[N];
    double h[N];
    double ftt[N+1];

    for (i=0; i<N; i++)
    {
        w[i] = (x[i+1]-x[i]);
        h[i] = (y[i+1]-y[i])/w[i];
    }

    ftt[0] = 0;
    for (i=0; i<N-1; i++)
        ftt[i+1] = 3*(h[i+1]-h[i])/(w[i+1]+w[i]);
    ftt[N] = 0;

    for (i=0; i<N; i++)
    {
        A[i] = (ftt[i+1]-ftt[i])/(6*w[i]);
        B[i] = ftt[i]/2;
        C[i] = h[i]-w[i]*(ftt[i+1]+2*ftt[i])/6;
        D[i] = y[i];
        printf("%f <= x <= %f : f(x) = %f(x-%f)^3 + %f(x-%f)^2 + %f(x-%f) + %f\n"
               ,x[i],x[i+1],A[i],x[i],B[i],x[i],C[i],x[i],D[i]);
    }
}

Please note that the above code assumes $x_0 < x_1 < ... < x_N$.
A: try this one: $y - a = -b \ln (x-c)$ where $a, b, c$ are sliders. I like it at $a = 0.6, b = 1.1, c = -0.7$
Try it!
