- 運沙

# B-Spline Study Notes(open)

More material: https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-basis.html

One of the challenges in my current project is to realize protein structures in __ribbon diagram form.__

To create smooth curves with continuity on protein structures, it was noted in the two papers by Mike Carson, __Algorithm for ribbon models and proteins__ and __Ribbon models of macromolecules__, that B-Spline needs to be applied for such visualization.

Never really touched B-Spline related knowledge, I decided to study from the very root.

I'm pasting my study notes here as archives.

A really good tutorial I found on YouTube:

To study B-Spline, I start from learning Bezier Curve:

A Bezier curve is a parametric curve that uses the __Bernstein Polynomials__ as a basis. A Bezier curve of degree n (order n+1) is represented by:

1. bi here stands for the control point (Bezier Points) coordinates.

Example above: A cubic Bezier(4 control points) curve

**B-Spline **is jointed Bezier curves : A k degree B-Spline Curve defined by n + 1 control points will consist of n-k+1 Bezier Curves

To be a B-Spline, the Bezier curves must have the triple continuity(C0, C1, C2)

Definition equation:

The know vector is any sequence of numbers provided that each one is greater than or equal to the preceding one. The spacing between each knot in the vector determines the shape of the B-Spline curve.

The number of knots in a knot vector is related to the degree k and the number of control points n + 1 by: m = k+n+1(For example, a cubic B-Spline defined using 5 control points requires m = 3+4+1 = 8)

A Beizer curve with open uniform knot vector starts and ends at the first and last control points.

Comparison of basis function graphs with different kinds of knot vectors: