B样条曲线
1. Instruction
B样条(B-Spline)是一种曲线拟合方法,相较于Bezier曲线,B-Spline更容易局部调整。
本例程实现原理、符号定义与https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/ 一致
代码地址:
https://github.com/Christopher6488/BSpline
2. Some Important Points
2.1 Definition:


knot vector = u 0 , u 1 , . . . , u m ( m = n + p + 1 ) {u_0,u_1,...,u_m}(m=n+p+1) u0,u1,...,um(m=n+p+1)
BSpiline上的一个点最多受p+1个点的影响,而一个基函数 N i , p N_{i,p} Ni,p仅在其local support span [ u i , u i + p + 1 ) [u_i, u_{i+p+1}) [ui,ui+p+1) 产生作用
2.2 Recursive Diagram

There are there are at most p+1 degree p non-zero basis functions of degree p on a knot span [ u i , u i + 1 ) [u_i, u_{i+1}) [ui,ui+1)
2.2 Classification
2.2.1 Open Curve
定义在 [ u p , u m − p ] [u_p, u_{m-p}] [up,um−p], 因为只有在这些区间上,才有足够多(最多p+1个)的非零基函数对该区间support。
特别地,如果矢量节点均匀分布,则为Uniform BSpline. 如果前p+1个矢量节点重复并且最后p+1个矢量节点重复,则为Clamped BSpline.
Clamped BSpline 经过第一个Control Point和最后一个Control Point,并且和第一个control polyline以及最后一个control polyline相切。本代码是对 Uniform BSpline和Clamped BSpline的实现。
2.2.2 Closed Curve
3. Result
Uniform BSpline拟合2d点

Uniform BSpline拟合3d点

Clamped BSpline拟合2d点

Clamped BSpline拟合3d点

代码地址:https://github.com/Christopher6488/BSpline
参考资料:https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/