Three months ago, I asked a quesion about B-Spline basis function [here](https://mathematica.stackexchange.com/questions/63192/how-to-deal-with-the-condition-u-i-u-i1-in-b-spline-basis-function/63373#63373), Today, I used this function to plot B-spline curve. ###The definition of $N_{i,p}$ NBSpline[i_Integer, 0, knots_?(VectorQ[#, NumericQ] && OrderedQ[#] &),u_] /; i <= Length[knots] - 2 := Piecewise[ {{1, knots[[i + 1]] <= u < knots[[i + 2]]}, {0, u < knots[[i + 1]] || u >= knots[[i + 2]]}}] coeff[u_, i_, j_, knots_] /; knots[[i]] == knots[[j]] := 0; coeff[u_, i_, j_, knots_] := (u - knots[[i]])/(knots[[j]] - knots[[i]]) NBSpline[i_Integer, p_Integer, knots_?(VectorQ[#, NumericQ] && OrderedQ[#] &), u_] /;p > 0 && i + p <= Length[knots] - 2 := Module[{init, res}, init = Table[NBSpline[j, 0, knots, u], {j, i, i + p}]; res = First@ Nest[ Dot @@@ (Thread@ {Partition[#, 2, 1], With[{m = p + 2 - Length@#}, Table[ {coeff[u, k + 1, k + m + 1, knots], coeff[u, k + m + 2, k + 2, knots]}, {k, i, i + Length@# - 2}]]}) &, init, p] ] ----------- ###The definition of B-Spline curve $$\overset{\rightharpoonup }{C}(u)=\sum _{i=0}^n N_{i,p}(u) \overset{\rightharpoonup }{P}_i \text{ }\qquad (a\leq u\leq b)$$ where, $P_i$ is the control point, the $N_ {i, p} (u)$ are the pth - degree Bspline basis functions defined on the nonperiodic (and nonuniform) knot vector knots= $\{\underbrace {a,\cdots ,a}_{p+1},u_{p+1},\cdots u_{m-p-1},\underbrace {b,\cdots,b}_{p+1}\}$ ---------------------- ###Trail 1 (Update) with george2079's solution BSplinePlot1[pts : {{_, _} ..}, knots_, opts : OptionsPattern[Plot]] := Module[{p = Length@First@Split[knots] - 1, a, b}, {a, b} = {First[knots], Last[knots]}; ParametricPlot[ Evaluate@ Simplify@ Total@ MapIndexed[ NBSpline[First@#2 - 1, p, knots, u] #1 &, pts], {u, a, b}, opts ] ] **Test1** pts3 = {{1, 6}, {2, 8}, {3, 6}, {4, 12}, {7, 11}, {9, 3}, {12, 7}, {14, 5}, {15, 8}, {17, 8}}; knots3= {0, 0, 0, 1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8, 1, 1, 1}; BSplinePlot1[pts3, knots3, ImageSize -> 600] > ![enter image description here][1] Graphics[{BSplineCurve[pts, SplineKnots -> knots], Green, Line[pts], Red, Point[pts]}] // AbsoluteTiming > ![enter image description here][2] ------------------------------------- ###Update * Is there any method to speed up the calculation of `NBSPline`? See [george2079's solution](https://mathematica.stackexchange.com/questions/71778/how-to-speed-up-the-plotting-of-b-spline-curve/71818#71818) and [my answer](https://mathematica.stackexchange.com/questions/71778/how-to-speed-up-the-plotting-of-b-spline-curve/72180#72180) * How to deal with the problem of **discontinuity** shown in the first graph? Add the option `PlotPoints` [1]: https://i.sstatic.net/4XYIn.png [2]: https://i.sstatic.net/aiXxc.png