B-スプライン曲線

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
B-スプライン曲線と制御点の例

B-スプライン曲線(B-スプラインきょくせん、B-spline curve)とは、与えられた複数の制御点から定義される滑らかな曲線である。区分多項式により表現されているため、一部を変更しても曲線全体に影響は及ばない等の性質がある。ベジエ曲線とともに、コンピュータグラフィックスの世界で広く利用されている。なお、B-splineはBasis spline(Basis=基底)の省略形である(en:B-Spline)。基本的に曲線は制御点を通らない

定義[編集]

制御点をPiとすると、n次のB-spline曲線

\mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [t_{n},t_{m-n-1}].

と表される。ここで、tiはノット(knot)と呼ばれるm 個の実数である。

t_0 \le t_1 \le \cdots \le t_{m-1}

また、bi,nB-スプライン基底関数(B-spline basis function)と呼ばれ、de Boor Coxの漸化式 によって次のように定義される。

b_{j,0}(t) := \left\{
\begin{matrix} 
1 & \mathrm{if} \quad t_j \leq t < t_{j+1} \\
0 & \mathrm{otherwise} 
\end{matrix}
\right.,\qquad j=0,\ldots, m{-}2
b_{j,n}(t) := \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t)
,\qquad j=0,\ldots, m{-}n{-}2.

[編集]

一様2次B-スプライン曲線[編集]

一様なノットにおける2次B-スプライン曲線において、B-スプライン基底関数は次のようになる。

b_{j,2}(t) = \begin{cases} \frac{1}{2}t^2 \\ -t^2 + t + \frac{1}{2} \\ \frac{1}{2}(1-t)^2   \end{cases}

これを行列形式にすると、

 \mathbf{S}_i(t) = \begin{bmatrix} t^2 & t & 1 \end{bmatrix} \frac{1}{2} \begin{bmatrix}
1 & -2 & 1 \\
-2 &  2 & 0 \\
1 &  1 & 0 \end{bmatrix}
\begin{bmatrix} \mathbf{p}_{i-1} \\ \mathbf{p}_{i} \\ \mathbf{p}_{i+1} \end{bmatrix}
for t \in [0,1], i = 1,2 \ldots m-2

となる。

制御点と曲線[編集]

基本的に曲線は制御点を通らないが、例えば

t_0=t_1=t_2=0

のように連続した複数のノットに対し、同一の値を与えることで、対応する制御点に曲線を通すことができる。 上式の場合、以下のようになり、曲線の始点が0番目の制御点と一致する。

\mathbf{S}(0)= \mathbf{P}_{0}.

関連項目[編集]

外部リンク[編集]