module.





























exports=function(x1,y1,x2,y2,epsilon){

var curveX=function(t){
var v=1-t;
return 3*v*v*t*x1+3*v*t*t*x2+t*t*t;};


var curveY=function(t){
var v=1-t;
return 3*v*v*t*y1+3*v*t*t*y2+t*t*t;};


var derivativeCurveX=function(t){
var v=1-t;
return 3*(2*(t-1)*t+v*v)*x1+3*(-t*t*t+2*v*t)*x2;};


return function(t){

var x=t,t0,t1,t2,x2,d2,i;


for(t2=x,i=0;i<8;i++){
x2=curveX(t2)-x;
if(Math.abs(x2)<epsilon){return curveY(t2);}
d2=derivativeCurveX(t2);
if(Math.abs(d2)<1e-6){break;}
t2=t2-x2/d2;}


t0=0;
t1=1;
t2=x;

if(t2<t0){return curveY(t0);}
if(t2>t1){return curveY(t1);}


while(t0<t1){
x2=curveX(t2);
if(Math.abs(x2-x)<epsilon){return curveY(t2);}
if(x>x2){t0=t2;}else 
{t1=t2;}
t2=(t1-t0)*0.5+t0;}



return curveY(t2);};};