NURBS
NURBSとは
NURBS(非一様有理Bスプライン Non-Uniform Rational B-Spline)とは、以下のような曲線(曲面)のことである。
- Non-Uniform
- 節点(ノット)の間隔が一定ではない。
(コントロールポイントによって制御できる範囲を調節できる)
- Rational
- 同次座標系から投影された結果、有理式で表現される。
(ウエイトがある)
- B-Spline
- Bスプライン基底関数によってできている。
NURBSの構成要素
NURBSは以下の要素によって構成される。
- 制御点(コントロールポイント Control Point、コントロールバーティクス Control Vertics)
各制御点は重み(ウエイトWeight)をもつ。
各制御点は階数分の区間で形をコントロールできる。
区間の範囲はノットによって決まる。
- ノット(節点、knot)
単調に増加する数列。
曲線の区間はノットの数値の大きさは関係なく、各数値間の比率で決まる。
多重ノットをもちいると端点をコントロールポイントに一致させたり、
連続でない曲線を作ることができる。
ノットの個数 = 制御点の個数 + 階数
または
ノットの個数 = 制御点の個数 + (次数 + 1)
NURBSの用語
- 階数
- 階数が上がれば滑らかな曲線が得られるが計算が複雑になるので、CGでは階数は4くらいで十分である。
一つの区間で階数と同じ数の基底関数を混ぜ合わせて曲線が決まる。
(次数 + 1)
- 次数
- 次数によって何次の方程式によって曲線が表されるかが決まる。
(階数 - 1)
NURBS曲線の作り方(de Boor Coxの算法)
計算に必要な要素は以下の通り。
- 階数(K)
- 制御点(n個、Q0, Q1, ... Qn-1)
- 各制御点のウエイト(w0, w1, ... wn-1)
- ノットの列(t0, t1, ... tn+K-1)
計算の手順は以下の通り。
- 各制御点を同次座標に変換する。
Qi *= wi
- 以下の1 〜 4 を t = tK-1 から t = tn-K-1 までくりかえす。
- tの存在する区間を求める [ts, ts+1]
ts <= t && t <= ts+1
- B-Spline基底関数を求める
Bi,K(t)(s - K + 1 <= i && i <= s)を計算する。
- 1階(0次)
Bi,1(t) = 1 (ti <= t < ti+1)
Bi,1(t) = 0 (t < ti && ti+1 <= t)
- 2階以上(K階、K-1次)
Bi,K(t) = ((t - ti)/(ti+K-1 - ti)) * Bi,K-1(t) + ((ti+K - t)/(ti+K - ti+1)) * Bi+1,K-1(t)
- 曲線の計算(2次元)
曲線上の点P(t) = (x, y, w)を求める。
Qi = (xi, yi, wi)としてBi,K(t)(s - K + 1 <= i && i <= s)を使って以下の式を計算する。
P(t) = ΣBi,K(t)Qi
つまり
x = ΣBi,K(t)xi
y = ΣBi,K(t)yi
w = ΣBi,K(t)wi
- 同次座標を一般座標に戻す。
x /= w
y /= w
参考
Home | Contents
Mail