(* 
      compute distance table for given function *) 

 (* define 2  D cubic function *) 
      Pxy[u_, ax_, bx_, cx_, dx_, ay_, by_, cy_, 
        dy_] :=  {ax*u^3 + bx*u^2 + cx*u  + dx,  
        ay*u^3 + by*u^2 + cy*u + 
          dy}

 (* 
      specify four points to constrain cubic function *) 
P0 = {2, 2};
P1  =  {3, 4};
P2  =  {4, 1};
P3  =  {5, 2};

  
v  =  
        Solve[
{Pxy[0, ax, bx,  cx, dx, ay, by, cy, 
                dy]  ==  
              P0, 
Pxy[1/3, ax, bx,  cx, dx, ay, by, cy, 
                dy] == P1, 
 
            Pxy[2/3, ax, bx,  cx, dx, ay, by, cy, dy] == 
              P2, 
Pxy[1, ax, bx,  cx, dx, ay, by, cy, 
                dy] == P3}, 
{ax, bx,  cx, dx, ay, 
            by, cy, dy}];

  t =  
        Table[Pxy[u, ax, bx,  cx, dx, ay, by, cy, dy]  /.  
            v[[1]], 
{u, 0, 1, 0.01}];

distance[x1_, y1_, x2_, y2_]  =  
        Sqrt[(x1 - x2)^2 +  (y1 - y2)^2];

g[1] =  0
g[i_]  :=  
      distance[Part[t[[i]], 1], Part[t[[i]], 2], 
          Part[t[[i - 1]], 1], Part[t[[i - 1]], 2]]  +  
        g[i - 1]

w  =  Table[g[i], {i, 1,  101}];

w1  =  Table[w[[i]]/w[[101]], {i, 1, 101}];

ListPlot[w1]

Search[u_]  :=  
      Catch[Do[If[w1[[i]] > u, Throw[{i - 1, i}]], {i, 1, 
            101}]]

For[u = 0.1,  u < 1.0, u += 0.1, v = Search[u]; i1 = v[[1]]; 
      i2 = v[[2]]; t1 = w1[[i1]]; t2 = w1[[i2]]; 
      s = (u - t1)/(t2 - t1); s1  =  (i1)/100;  
      s2  =  (i2)/100;  s3  =  s1  +  s*(s2 - s1); 
      Print[{u, s3}]]

Search[0.6]

For[i = 1, i < 101, i++, uu = i/100; 
      Print[N[uu], ",  ", w1[[i]]]]