In[]:=
interpolatingCurve[pts_]:=Module[{dist,k,coeff,diff,a1,a2,bezier},​​dist=Norm/@Differences[pts];​​k=0.5;​​coeff=Rest[dist]/(Most[dist]+Rest[dist]);​​diff=Differences[pts,1,2];​​a1=pts-Join[{{0,0}},k(1-coeff)diff,{{0,0}}];​​a2=pts+Join[{{0,0}},kcoeffdiff,{{0,0}}];​​bezier=Arrow@BezierCurve@Flatten[{a1,pts,a2},{{2,1}}][[2;;-2]]​​]
In[]:=
Manipulate[Graphics[interpolatingCurve[loc]],"None"->{{loc,RandomReal[{0,10},{10,2}]},{0,0},{10,10},Locator,LocatorAutoCreate->True}]
Out[]=
​
In[]:=
interpolatingCurveB[pts_]:=Module[{dist,k,coeff,diff,a1,a2,bezier},​​dist=Norm/@Differences[pts];​​k=0.5;​​coeff=Rest[dist]/(Most[dist]+Rest[dist]);​​diff=Differences[pts,1,2];​​a1=pts-Join[{{0,0}},k(1-coeff)diff,{{0,0}}];​​a2=pts+Join[{{0,0}},kcoeffdiff,{{0,0}}];​​bezier=Arrow@BSplineCurve@Flatten[{a1,pts,a2},{{2,1}}][[2;;-2]]​​]
In[]:=
Manipulate[Graphics[interpolatingCurveB[loc]],"None"->{{loc,RandomReal[{0,10},{10,2}]},{0,0},{10,10},Locator,LocatorAutoCreate->True}]
Out[]=
​