B-スプライン曲線

提供: testwiki
ナビゲーションに移動 検索に移動
B-スプライン曲線と制御点の例

テンプレート:読み仮名は、与えられた複数の制御点とノットから定義される滑らかな曲線である。

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

定義

パラメータ t 上に m 個の値 {tj | tjtj+1, j{0,1,...,m1}}ノット)をとり、次数を n とする。

制御点を 𝐏i, 0imn2 とすると、n 次の B-スプライン曲線 𝐒(t) は以下で定義される:

𝐒(t)=i=0mn2𝐏ibi,n(t) ,t[tn,tmn1].

このとき bi,n(t)テンプレート:読み仮名と呼ばれ、de Boor Coxの漸化式 によって次のように定義される。

bj,0(t):={1iftjt<tj+10otherwise,j=0,,m2
bj,k(t):=ttjtj+ktjbj,k1(t)+tj+k+1ttj+k+1tj+1bj+1,k1(t),j=0,,mk2.

ベジェ曲線との関係性

n次B-スプライン曲線は、以下のように制限するとn次ベジェ曲線と同一の式になる。つまりベジェ曲線はB-スプライン曲線の特殊な場合である。

  • 制御点の数は n+1 個。よってノットの数は m=2(n+1) 個。
  • t が 0 から 1 まで変化するとし、ノットは tj=0 for jn および tj=1 for j>n

ノット

B-スプラインにおけるノットテンプレート:Lang-en-short)はパラメータ t の値であって、セグメントの区切りを定めるものである[1]

ノットの範囲は t0=0,tm1=1 とすることが多い[2]

ノットベクトル

ノットベクトルテンプレート:Lang-en-short)は昇順に並べられたノットの列である[3][4]

ノットベクトルはいくつかの種類にわけられる。以下はその一例である:

一様ノットベクトル

テンプレート:読み仮名はノットが等間隔に配置されたノットベクトルである[5][6]m 個のノットからなる一様ノットベクトルは j 番目の要素 tj, j{0,...,m1} が以下のように定義される[7]

tj=t0+tm1t0m1j

言い換えれば、要素が等差数列状に並んでいるノットベクトルが一様ノットベクトルである[6]

開一様ノットベクトル

テンプレート:読み仮名はベクトルの両端がそれぞれB-スプラインの次数だけ重複しているノットベクトルである[8][7]テンプレート:読み仮名とも[9][10]。 開一様ノットベクトルは次の手順で作られる:

  • 最初の n+1 個は 0 とする。
  • 最後の n+1 個は 1 とする。
  • 残りの m2(n+1) 個は 0 より大きく 1 より小さい値で均等間隔で埋める。

例えば、n = 2, m = 7 の場合は制御点は4個でノットベクトルは [0 0 0 0.5 1 1 1] である。このノットベクトルの作り方では、曲線の端点は最初と最後の制御点になる。また、制御点の数が n+1 個の場合はn次ベジェ曲線と同一になる。

非一様ノットベクトル

テンプレート:読み仮名はノットが不規則に配置されたノットベクトルである[11][12]

制御点と曲線

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

t0=t1=t2=0

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

𝐒(0)=𝐏0.

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

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

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

bj,2(t)={12t2t2+t+1212(1t)2

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

𝐒i(t)=[t2t1]12[121220110][𝐩i1𝐩i𝐩i+1] for t[0,1],i=1,2m2

となる。

3次B-スプライン曲線

行列形式は次のようになる。

𝐒i(t)=[t3t2t1]𝐑i[𝐩i𝐩i+1𝐩i+2𝐩i+3],t[0,1]

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

𝐑i=16[1331363030301410]

開一様3次B-スプライン曲線[13]

制御点の数をMとする。M7 の場合、𝐑iは次のようになる。

𝐑0=[17411121639232033001000]
𝐑1=[1471212163454120341412014712160]
𝐑i=16[1331363030301410] for 2iM6
𝐑M5=[1612712141211201201201623160]
𝐑M4=[1611127411254340121434016712140]

有理B-スプライン

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

B-スプライン曲面

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

𝐒(u,v)=iu=0munu2iv=0mvnv2𝐏iu,ivbiu,nu(u)biv,nv(v) ,u[unu,umunu1], v[vnv,vmvnv1].

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

脚注

出典

テンプレート:Reflist

参考文献

関連項目

外部リンク

de:Spline#B-Splines

  1. "セグメントの区切りとなるパラメータの値を定義した数値(ノット)" テンプレート:Harvnb より引用。
  2. B-spline Basis Functions: Definition - CS3621 Introduction to Computing with Geometry Notes
  3. "ノットベクトル ... ノット ... の列" テンプレート:Harvnb より引用。
  4. "Bスプラインの形を決めるもの ... ノット列の値は単純増加" テンプレート:Harvnb より引用。
  5. "ノットベクトル ti が一定の間隔で存在する → 一様" テンプレート:Harvnb より引用。
  6. 6.0 6.1 "ノットベクトルには、次の3つの型がある。... ノットベクトルが等差数列になっている場合の一様なノットベクトル(uniform knot vector)" テンプレート:Harvnb より引用。
  7. 7.0 7.1 B-splines - Advanced Graphics and HCI
  8. "ノットベクトルには、次の3つの型がある。...ノットベクトルが両端で階数だけ重複している場合の開一様ノットベクトル(open uniform)" テンプレート:Harvnb より引用。
  9. 9.0 9.1 Knot Vector Generation - CS3621 Introduction to Computing with Geometry Notes
  10. Knot Vector Generation for B-Spline Interpolation - Wolfram Demonstrations Project
  11. "ノットベクトルには、次の3つの型がある。...非一様ノットベクトル(non-uniform knot vector)" テンプレート:Harvnb より引用。
  12. "ノットベクトル ... ノットの間隔を変更すると「非一様」になる" テンプレート:Harvnb より引用。
  13. テンプレート:Cite journal
  14. B-spline Surfaces: Construction - CS3621 Introduction to Computing with Geometry Notes