I wrote a function called deBoor using the Cox-de Boor algorithm to generate a B-spline curve. (*Search the index of span [ui,ui+1)*) searchSpan[knots_, u0_] := With[{max = Max[knots]}, If[u0 == max, Position[knots, max][[1, 1]] - 2, Ordering[UnitStep[u0 - knots], 1][[1]] - 2] ] (*The definition of α coefficient*) α[{deg_, knots_}, {j_, k_}, u0_] /; knots[[j + deg + 2]] == knots[[j + k + 1]] := 0 α[{deg_, knots_}, {j_, k_}, u0_] := (u0 - knots[[j + k + 1]])/(knots[[j + deg + 2]] - knots[[j + k + 1]]) (*Implementation of de Boor algorithm*) deBoor[pts : {{_, _} ..}, {deg_, knots_}, u0_] := Module[{calcNextGroup, idx = searchSpan[knots, u0]}, calcNextGroup = Function[{points, k}, Module[{coords, coeffs}, coords = Partition[points, 2, 1]; coeffs = {1 - #, #} & /@ (α[{deg, knots}, {#, k + 1}, u0] & /@ Range[idx - deg, idx - k - 1]); {Plus @@@ MapThread[Times, {coords, coeffs}], k + 1}] ]; Nest[calcNextGroup[Sequence @@ #] &, ...