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

B-スプライン曲線と制御点の例

定義

編集

制御点を   とすると、  次のB-スプライン曲線

 .

と表される。制御点の個数は   個。ここで   はノット(knot)と呼ばれる   個の実数(ベクトル)である。  とすることが多い[1]

 

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

 
 

B-スプライン曲面

編集

  方向に   次で   方向に   次のB-スプライン曲面(B-spline surface)は以下のように表される[2]

 .

ノットや基底関数は曲線と同じ。制御点の個数は   個。

ベジェ曲線との関係性

編集

nB-nB-

      

t 0 1      

ノットベクトルの作り方

編集

ノットベクトルの作り方には色々な方法がある。

一様ノットベクトル

編集

一様ノットベクトル(uniform knot vector)[3]とは以下のようにノットを定義する。均等間隔で埋めたもの。

 

開一様ノットベクトル

編集

open uniform knot vector[3]uniformly-spaced knot vector[4][5]

    0 

   1

    0 1

n = 2, m = 7 4      n

制御点と曲線

編集

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

 

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

 .

ノットベクトルの最初の n + 1 個と、最後の n + 1 個を同一にすることで、曲線の端点は最初と最後の制御点になり、固定(clamped)される[4]

一様2次B-スプライン曲線

編集

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

 

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

  for  

となる。

有理B-スプライン

編集

有理B-スプラインは各制御点に重みを付けた物。詳細はNURBS(非一様有理B-スプライン)を参照。

関連項目

編集

参照

編集

外部リンク

編集
  • Interactive java applets for B-splines
  • Weisstein, Eric W. "B-Spline". mathworld.wolfram.com (英語).