def N(i,k,u):
if k == 1:
if kv[i] <= u and u < kv[i+1]:
return 1
else:
return 0
else:
val = 0
if N(i,k-1,u)*(u - kv[i])==0 and (kv[i+k-1] - kv[i])==0:
val += 0
else:
val += N(i,k-1,u)*(u - kv[i])/(kv[i+k-1] - kv[i])
if N(i+1,k-1,u)*(kv[i+k] - u)==0 and (kv[i+k] - kv[i+1])==0:
val += 0
else:
val += N(i+1,k-1,u)*(kv[i+k] - u)/(kv[i+k] - kv[i+1])
return val
def Q(u):
k=4
sum_x = 0
sum_y = 0
totaln = 0
for i in range(len(points)):
temp= N(i,k,u)
totaln += temp
sum_x += points[i][0]*temp
sum_y += points[i][1]*temp
#check if total N = 1.0 , which it should
if totaln < 0.99999 or totaln > 1.000001:
print "totaln = %.15f at u= %f "% (totaln, u)
return (sum_x,sum_y)