BSplineFunction[{pt1,pt2,…}]
represents a B-spline function for a curve defined by the control points pti.
BSplineFunction[array]
represents a B-spline function for a surface or high-dimensional manifold.
BSplineFunction
BSplineFunction[{pt1,pt2,…}]
represents a B-spline function for a curve defined by the control points pti.
BSplineFunction[array]
represents a B-spline function for a surface or high-dimensional manifold.
Details and Options
- BSplineFunction is also known as basis spline, nonuniform rational B-spline (NURBS).
- BSplineFunction[…][u] gives the point on a B-spline curve corresponding to parameter u.
- BSplineFunction[…][u,v,…] gives the point on a general B-spline manifold corresponding to the parameters u, v, ….
- The embedding dimension for the curve represented by BSplineFunction[{pt1,pt2,…}] is given by the length of the lists pti.
- BSplineFunction[array] can handle arrays of any depth, representing manifolds of any dimension.
- The dimension of the manifold represented by BSplineFunction[array] is given by ArrayDepth[array]-1. The lengths of the lists that occur at the lowest level in the array define the embedding dimension.
- BSplineFunction[array,d] creates a B-spline function of d variables.
- The parameters u, v, … by default run from 0 to 1 over the domain of the curve or other manifold.
- The following options can be given:
-
SplineDegree Automatic degree of polynomial basis SplineKnots Automatic knot sequence for spline SplineWeights Automatic control point weights SplineClosed False whether to make the spline closed - By default, BSplineFunction gives cubic splines.
- The option setting SplineDegree->d specifies that the underlying polynomial basis should have maximal degree d.
- By default, knots are chosen uniformly in parameter space, with additional knots added so that the curve starts at the first control point and ends at the last one.
- With an explicit setting for SplineKnots, the degree of the polynomial basis is determined from the number of knots specified and the number of control points.
- With the default setting SplineWeights->Automatic, all control points are chosen to have equal weights, corresponding to a polynomial B-spline function.
- With the setting SplineClosed->{c1,c2,…}, the boundaries are connected in directions i for which ci is True.
Examples
open all close allBasic Examples (2)
Construct a B-spline curve using a list of control points:
pts = {{1, 1}, {2, 3}, {3, -1}, {4, 1}, {5, 0}};f = BSplineFunction[pts]Apply the function to find a point on the curve:
f[.5]Plot the B-spline curve with the control points:
Show[Graphics[{Red, Point[pts], Green, Line[pts]}, Axes -> True], ParametricPlot[f[t], {t, 0, 1}]]Construct a B-spline surface closed in the u-direction:
pts = Table[{ Cos[2Pi u / 6]Cos[v], Sin[2Pi u / 6]Cos[v], v}, {u, 6}, {v, -1, 1, 1 / 2}];f = BSplineFunction[pts, SplineClosed -> {True, False}]Show the surface with the control points:
Show[Graphics3D[{PointSize[Medium], Red, Map[Point, pts]}], Graphics3D[{Gray, Line[pts], Gray, Line[Transpose[pts]]}], ParametricPlot3D[f[u, v], {u, 0, 1}, {v, 0, 1}]]Scope (4)
Create a vector-valued function of dimension 2:
f = BSplineFunction[RandomReal[1, {10, 2}]]f[.5]ParametricPlot[f[u], {u, 0, 1}]Create a vector-valued function of dimension 3:
pts = Table[{i, RandomReal[10], RandomReal[10]}, {i, 10}];g = BSplineFunction[RandomReal[1, {10, 3}]]g[.5]ParametricPlot3D[g[u], {u, 0, 1}]Generate a two-variable function:
f = BSplineFunction[RandomReal[1, {10, 10, 1}]]f[0.5, 0.5]Plot3D[f[x, y], {x, 0, 1}, {y, 0, 1}]Generate a three-variable function:
f = BSplineFunction[RandomReal[1, {5, 5, 5, 1}]]f[.5, .5, .5]ContourPlot3D[f[u, v, w], {u, 0, 1}, {v, 0, 1}, {w, 0, 1}, Mesh -> None]Generalizations & Extensions (1)
SparseArray can be used with BSplineFunction:
pts = SparseArray[{i_, j_} /; Abs[i - j] < 3 :> Cos[Abs[i - j]], {6, 6}]f = BSplineFunction[pts, 2]Plot3D[f[u, v], {u, 0, 1}, {v, 0, 1}]Options (6)
SplineDegree (2)
pts = RandomReal[1, {10, 2}];ParametricPlot[BSplineFunction[pts, SplineDegree -> 1][u], {u, 0, 1}]Make a quadratic B-spline curve:
ParametricPlot[BSplineFunction[pts, SplineDegree -> 2][u], {u, 0, 1}]Degrees can be specified in each parametric direction separately:
pts = RandomReal[1, {7, 5, 1}];Plot3D[BSplineFunction[pts, SplineDegree -> {1, 3}][u, v], {u, 0, 1}, {v, 0, 1}, Mesh -> None]SplineKnots (3)
SplineKnots->Automatic generates knots in such a way that the curve is smooth overall:
pts = {{0, 0}, {0, 2}, {2, 3}, {4, 0}, {6, 3}, {8, 2}, {8, 0}};Graphics[{Green, Line[pts], Red, Point[pts], StandardGray, BSplineCurve[pts, SplineKnots -> Automatic]}]By repeating knots, one can decrease the smoothness of the curve:
pts = {{0, 0}, {0, 2}, {2, 3}, {4, 0}, {6, 3}, {8, 2}, {8, 0}};Graphics[{Green, Line[pts], Red, Point[pts], StandardGray, BSplineCurve[pts, SplineKnots -> {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2}]}]Uniform knots that do not go through the endpoints:
pts = {{0, 0}, {0, 2}, {2, 3}, {4, 0}, {6, 3}, {8, 2}, {8, 0}};Graphics[{Green, Line[pts], Red, Point[pts], StandardGray, BSplineCurve[pts, SplineKnots -> "Unclamped"]}]Unclamped knots combined with SplineClosed will make a uniform periodic B-spline curve:
pts = {{0, 0}, {1, 0}, {1, 1}, {0, 1}};Graphics[{FaceForm[], EdgeForm[Green], Polygon[pts], Red, Point[pts], StandardGray, BSplineCurve[pts, SplineClosed -> True, SplineKnots -> "Unclamped"]}]SplineWeights (1)
pts = {{0, 0}, {1, 1}, {2, -1}, {3, 0}, {4, -2}, {5, 1}};Graphics[{Point[pts], BSplineCurve[pts, SplineWeights -> Automatic]}]This uses a larger weight for the third control point:
Graphics[{Point[pts], BSplineCurve[pts, SplineWeights -> {1, 1, 10, 1, 1, 1}]}]See Also
BezierFunction InterpolatingFunction BSplineBasis BSplineCurve BSplineSurface Piecewise
Function Repository: CurveToBSplineFunction AkimaInterpolation AkimaSpline LeeInterpolatingNodes
Related Guides
History
Text
Wolfram Research (2008), BSplineFunction, Wolfram Language function, https://reference.wolfram.com/language/ref/BSplineFunction.html.
CMS
Wolfram Language. 2008. "BSplineFunction." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/BSplineFunction.html.
APA
Wolfram Language. (2008). BSplineFunction. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/BSplineFunction.html
BibTeX
@misc{reference.wolfram_2026_bsplinefunction, author="Wolfram Research", title="{BSplineFunction}", year="2008", howpublished="\url{https://reference.wolfram.com/language/ref/BSplineFunction.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_bsplinefunction, organization={Wolfram Research}, title={BSplineFunction}, year={2008}, url={https://reference.wolfram.com/language/ref/BSplineFunction.html}, note=[Accessed: 13-June-2026]}