function bsplineBasis(i,k,knots)
{
if(k==1)
{
return (function(t) { if((knots[i]<=t) && (t<knots[i+1])) {return 1;} else {return 0;}});
}
else
{
return (function(t) {
if(bsplineBasis(i,k-1,knots)(t) == 0){
if(bsplineBasis(i+1,k-1, knots)(t) == 0){
return 0;
}else{
return bsplineBasis(i+1,k-1,knots)(t)*(knots[i+k]-t)/(knots[i+k]-knots[i+1]);
}
}else if(bsplineBasis(i+1,k-1,knots)(t)*( knots[i+k]-t) == 0){
if(bsplineBasis(i,k-1,knots)(t) == 0){
return 0;
}else{
return bsplineBasis(i,k-1,knots)(t)*(t- knots[i])/(knots[i+k-1]- knots[i]);
}
}
else {
return bsplineBasis(i,k-1,knots)(t)*(t- knots[i])/( knots[i+k-1]- knots[i]) + bsplineBasis(i+1,k-1,knots)(t)*( knots[i+k]-t)/( knots[i+k]- knots[i+1]);
}
})
}
}