readlib(bspline): with(plots): # # plot various B-spline basis functions # plot(convert(bspline(0,u), procedure), 0..1, title=`Uniform Constant B-Spline`); plot(convert(bspline(1,u), procedure), 0..2, title=`Uniform Linear B-Spline`); plot(convert(bspline(2,u), procedure), 0..3, title=`Uniform Quadratic B-Spline`); plot(convert(bspline(3,u), procedure), 0..4, title=`Uniform Cubic B-Spline`); plot(convert(bspline(4,u), procedure), 0..5, title=`Uniform Quartic B-Spline`); k := [0, 1, 2, 3, 4]: p1 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=YELLOW): k := [0, 1, 2.5, 3, 4]: p2 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=GREEN): k := [0, 1, 2.5, 2.75, 4]: p3 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=CYAN): k := [0, 1, 2.5, 2.6, 4]: p4 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=MAGENTA, title=`Cubic B-Spline on varying interior knot spacing`): display({p1,p2,p3,p4}); k := [0, 1, 2, 3]: p1 := convert(bspline(2,u,k), procedure): k := [1, 2, 2, 3]: p2 := convert(bspline(2,u,k), procedure): k := [2, 3, 4, 4]: p3 := convert(bspline(2,u,k), procedure): plot({p1,p2,p3}, 0..4, title=`Quadratic B-Splines on knot vectors [0 1 2 3], [1 2 2 3] and [2 3 4 4]`); k := [0, 1, 2, 3.5, 4]: p1 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=YELLOW): k := [0, 1, 2, 3.9, 4]: p2 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=GREEN): k := [0, 1, 2, 4, 4]: p3 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=CYAN): k := [0, 1, 4, 4, 4]: p4 := plot(convert(bspline(3,u,k), procedure), 0..4, colour=MAGENTA, title=`Cubic B-Spline with knots going from [0 1 2 3 4] to [0 1 4 4 4]`): display({p1,p2,p3,p4}); k := [-1, 0, 1]: p1 := plot(convert(bspline(1,u,k), procedure), -3..3, colour=YELLOW): p1; k := [-2,-1, 0, 1,2]: p3 := plot(convert(bspline(3,u,k), procedure), -3..3, colour=GREEN): p3; k := [-3,-2,-1, 0, 1,2,3]: p5 := plot(convert(bspline(5,u,k), procedure), -3..3, colour=CYAN): k := [-4,-3,-2,-1, 0, 1,2,3,4]: p7 := plot(convert(bspline(7,u,k), procedure), -3..3, colour=MAGENTA): p7; k := [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]: p9 := plot(convert(bspline(9,u,k), procedure), -3..3, colour=YELLOW): s := 0.93: pg := plot(1/(sqrt(2*Pi)*s)*exp(-(t^2/(2*s^2))), t=-3..3, colour=CYAN): display({pg, p9}, title=`Degree 9 Uniform B-splines and Gaussian with sigma=0.93`);