B-スプライン曲線

テンプレート:読み仮名は、与えられた複数の制御点とノットから定義される滑らかな曲線である。
区分多項式により表現されているため、一部を変更しても曲線全体に影響は及ばない等の性質がある。ベジェ曲線とともに、コンピュータグラフィックスの世界で広く利用されている。なお、B-splineはBasis spline(Basis=基底)の省略形である。曲線は必ずしも制御点を通らない。
定義
パラメータ 上に 個の値 (ノット)をとり、次数を とする。
制御点を とすると、 次の B-スプライン曲線 は以下で定義される:
- .
このとき は テンプレート:読み仮名と呼ばれ、de Boor Coxの漸化式 によって次のように定義される。
ベジェ曲線との関係性
n次B-スプライン曲線は、以下のように制限するとn次ベジェ曲線と同一の式になる。つまりベジェ曲線はB-スプライン曲線の特殊な場合である。
- 制御点の数は 個。よってノットの数は 個。
- t が 0 から 1 まで変化するとし、ノットは および 。
ノット
B-スプラインにおけるノット(テンプレート:Lang-en-short)はパラメータ の値であって、セグメントの区切りを定めるものである[1]。
ノットの範囲は とすることが多い[2]。
ノットベクトル
ノットベクトル(テンプレート:Lang-en-short)は昇順に並べられたノットの列である[3][4]。
ノットベクトルはいくつかの種類にわけられる。以下はその一例である:
一様ノットベクトル
テンプレート:読み仮名はノットが等間隔に配置されたノットベクトルである[5][6]。 個のノットからなる一様ノットベクトルは 番目の要素 が以下のように定義される[7]:
言い換えれば、要素が等差数列状に並んでいるノットベクトルが一様ノットベクトルである[6]。
開一様ノットベクトル
テンプレート:読み仮名はベクトルの両端がそれぞれB-スプラインの次数だけ重複しているノットベクトルである[8][7]。テンプレート:読み仮名とも[9][10]。 開一様ノットベクトルは次の手順で作られる:
- 最初の 個は 0 とする。
- 最後の 個は 1 とする。
- 残りの 個は 0 より大きく 1 より小さい値で均等間隔で埋める。
例えば、n = 2, m = 7 の場合は制御点は4個でノットベクトルは である。このノットベクトルの作り方では、曲線の端点は最初と最後の制御点になる。また、制御点の数が 個の場合はn次ベジェ曲線と同一になる。
非一様ノットベクトル
テンプレート:読み仮名はノットが不規則に配置されたノットベクトルである[11][12]。
制御点と曲線
基本的に曲線は制御点を通らないが、例えば
のように連続した複数のノットに対し、同一の値を与えることで、対応する制御点に曲線を通すことができる。 2次B-スプライン曲線の場合、以下のようになり、曲線の始点が0番目の制御点と一致する。
- .
ノットベクトルの最初の n + 1 個と、最後の n + 1 個を同一にすることで、曲線の端点は最初と最後の制御点になり、固定(clamped)される[9]。
例
一様2次B-スプライン曲線
一様なノットにおける2次B-スプライン曲線において、B-スプライン基底関数は次のようになる。
これを行列形式にすると、
- for
となる。
3次B-スプライン曲線
行列形式は次のようになる。
一様3次B-スプライン曲線
開一様3次B-スプライン曲線[13]
制御点の数をとする。 の場合、は次のようになる。
- for
有理B-スプライン
有理B-スプラインは各制御点に重みを付けた物。詳細はNURBS(非一様有理B-スプライン)を参照。
B-スプライン曲面
方向に 次で 方向に 次のB-スプライン曲面(B-spline surface)は以下のように表される[14]。
- .
ノットや基底関数は曲線と同じ。制御点の個数は 個。
脚注
出典
参考文献
関連項目
外部リンク
- ↑ "セグメントの区切りとなるパラメータの値を定義した数値(ノット)" テンプレート:Harvnb より引用。
- ↑ B-spline Basis Functions: Definition - CS3621 Introduction to Computing with Geometry Notes
- ↑ "ノットベクトル ... ノット ... の列" テンプレート:Harvnb より引用。
- ↑ "Bスプラインの形を決めるもの ... ノット列の値は単純増加" テンプレート:Harvnb より引用。
- ↑ "ノットベクトル ti が一定の間隔で存在する → 一様" テンプレート:Harvnb より引用。
- ↑ 6.0 6.1 "ノットベクトルには、次の3つの型がある。... ノットベクトルが等差数列になっている場合の一様なノットベクトル(uniform knot vector)" テンプレート:Harvnb より引用。
- ↑ 7.0 7.1 B-splines - Advanced Graphics and HCI
- ↑ "ノットベクトルには、次の3つの型がある。...ノットベクトルが両端で階数だけ重複している場合の開一様ノットベクトル(open uniform)" テンプレート:Harvnb より引用。
- ↑ 9.0 9.1 Knot Vector Generation - CS3621 Introduction to Computing with Geometry Notes
- ↑ Knot Vector Generation for B-Spline Interpolation - Wolfram Demonstrations Project
- ↑ "ノットベクトルには、次の3つの型がある。...非一様ノットベクトル(non-uniform knot vector)" テンプレート:Harvnb より引用。
- ↑ "ノットベクトル ... ノットの間隔を変更すると「非一様」になる" テンプレート:Harvnb より引用。
- ↑ テンプレート:Cite journal
- ↑ B-spline Surfaces: Construction - CS3621 Introduction to Computing with Geometry Notes