B-スプライン曲線
B-スプライン曲線(Bスプラインきょくせん、英: B-spline curve)とは、与えられた複数の制御点とノットベクトルから定義される滑らかな曲線である。区分多項式により表現されているため、一部を変更しても曲線全体に影響は及ばない等の性質がある。ベジェ曲線とともに、コンピュータグラフィックスの世界で広く利用されている。なお、B-splineはBasis spline(Basis=基底)の省略形である(en:B-Spline)。曲線は必ずしも制御点を通らない。
また b i , n ( t ) {\displaystyle b_{i,n}(t)} はB-スプライン基底関数(B-spline basis function)と呼ばれ、de Boor Coxの漸化式 によって次のように定義される。
b j , 0 ( t ) := { 1 if t j ≤ t < t j + 1 0 otherwise , j = 0 , ... , m − 2 {\displaystyle b_{j,0}(t):=\left\{{\begin{matrix}1&{\text{if}}\quad t_{j}\leq t<t_{j+1}\\0&{\text{otherwise}}\end{matrix}}\right.,\qquad j=0,\ldots ,m{-}2}
b j , k ( t ) := t − t j t j + k − t j b j , k − 1 ( t ) + t j + k + 1 − t t j + k + 1 − t j + 1 b j + 1 , k − 1 ( t ) , j = 0 , ... , m − k − 2. {\displaystyle b_{j,k}(t):={\frac {t-t_{j}}{t_{j+k}-t_{j}}}b_{j,k-1}(t)+{\frac {t_{j+k+1}-t}{t_{j+k+1}-t_{j+1}}}b_{j+1,k-1}(t),\qquad j=0,\ldots ,m{-}k{-}2.}
基本的に曲線は制御点を通らないが、例えば
t 0 = t 1 = t 2 = 0 {\displaystyle t_{0}=t_{1}=t_{2}=0}
のように連続した複数のノットに対し、同一の値を与えることで、対応する制御点に曲線を通すことができる。 2次B-スプライン曲線の場合、以下のようになり、曲線の始点が0番目の制御点と一致する。
S ( 0 ) = P 0 {\displaystyle \mathbf {S} (0)=\mathbf {P} _{0}} .
ノットベクトルの最初の n + 1 個と、最後の n + 1 個を同一にすることで、曲線の端点は最初と最後の制御点になり、固定(clamped)される。
制御点を P i {\displaystyle \mathbf {P} _{i}} とすると、 n {\displaystyle n} 次のB-スプライン曲線は
S ( t ) = ∑ i = 0 m − n − 2 P i b i , n ( t ) , t ∈ [ t n , t m − n − 1 ] {\displaystyle \mathbf {S} (t)=\sum _{i=0}^{m-n-2}\mathbf {P} _{i}b_{i,n}(t)\ {\text{,}}\qquad t\in [t_{n},t_{m-n-1}]} .
と表される。制御点の個数は m − n − 1 {\displaystyle m-n-1} 個。ここで t j {\displaystyle t_{j}} はノット(knot)と呼ばれる m {\displaystyle m} 個の実数(ベクトル)である。 t 0 = 0 , t m − 1 = 1 {\displaystyle t_{0}=0,t_{m-1}=1} とすることが多い。
t 0 ≤ t 1 ≤ ⋯ ≤ t m − 1 {\displaystyle t_{0}\leq t_{1}\leq \cdots \leq t_{m-1}}