B-スプライン曲線とは
B-スプライン
曲線(B-spline curve)は、与えられた複数の制御点とノットと呼ばれるパラメータに基づいて定義される、滑らかな
曲線です。この
曲線は、
コンピュータグラフィックスやCADなどの分野で広く利用されており、その柔軟性と制御性の高さから、複雑な形状を表現するのに適しています。
B-スプライン曲線の特徴
1.
区分多項式: B-スプライン
曲線は、区分的に
多項式で表現されます。これにより、
曲線の一部を変更しても、他の部分に影響が及ばないという局所的な制御が可能になります。
2.
制御点:
曲線は必ずしも制御点を通るわけではありませんが、制御点の位置を調整することで、
曲線の形状を直感的に変更できます。
3.
ノット: ノットは、
曲線を定義するパラメータ空間における区切り点です。ノットの配置によって、
曲線の形状や滑らかさが変化します。特に、ノットの多重度は
曲線の滑らかさに影響を与えます。
B-スプライン曲線の定義
B-スプライン
曲線は、以下の要素を用いて定義されます。
パラメータ (t): 実数空間 \( t \in \mathbb{R} \) を動きます。
ノット (\(t_j\)): m 個の値で、\(t_j \leq t_{j+1}\) を満たします。
次数 (n): 曲線の滑らかさを決定する自然数です。
制御点 (\(P_i\)):
曲線の形状を決定する点です。\(0 \leq i \leq m-n-2\) の範囲で定義されます。
これらの要素を用いて、n 次の B-スプライン
曲線 \(S(t)\) は以下の式で定義されます。
\( \mathbf{S}(t) = \sum_{i=0}^{m-n-2} \mathbf{P}_i b_{i,n}(t) \qquad t \in [t_n, t_{m-n-1}] \)
ここで、\(b_{i,n}(t)\) は B-スプライン基底関数と呼ばれ、de Boor Cox の漸化式によって定義されます。
B-スプライン基底関数
B-スプライン基底関数は、以下の漸化式で定義されます。
\( b_{j,0}(t) = \begin{cases} 1 & \text{if } t_j \leq t < t_{j+1} \\ 0 & \text{otherwise} \end{cases} \qquad j=0,\ldots,m-2 \)
\( b_{j,k}(t) = \frac{t-t_j}{t_{j+k}-t_j} b_{j,k-1}(t) + \frac{t_{j+k+1}-t}{t_{j+k+1}-t_{j+1}} b_{j+1,k-1}(t) \qquad j=0,\ldots,m-k-2 \)
ベジェ曲線との関係
n次のB-スプライン
曲線は、特定の条件を満たすとn次のベジェ
曲線と同一になります。これは、ベジェ
曲線がB-スプライン
曲線の特殊なケースであることを示しています。
ベジェ
曲線との同一化条件は以下の通りです。
制御点の数が \(n+1\) 個
ノットの数が \(m=2(n+1)\) 個
パラメータ t が 0 から 1 まで変化
ノットが \(t_j = 0\) (for \(j \leq n\)) および \(t_j = 1\) (for \(j > n\))
ノットとノットベクトル
ノットは、B-スプライン
曲線のパラメータ空間における区切り点であり、ノットの集合をノットベクトルと呼びます。
ノットベクトルには、いくつかの種類があります。
1.
一様ノットベクトル: ノットが等間隔に配置されたものです。\(t_j = t_0 + \frac{t_{m-1}-t_0}{m-1}j\) で定義されます。
2.
開一様ノットベクトル: ベクトルの両端がそれぞれB-スプラインの次数だけ重複しているノットベクトルです。
3.
非一様ノットベクトル: ノットが不規則に配置されたものです。
制御点と曲線の関係
一般的に、B-スプライン
曲線は制御点を必ずしも通りませんが、ノットに同じ値を複数設定することで、対応する制御点を通るようにできます。例えば、 \(t_0 = t_1 = t_2 = 0\) の場合、2次B-スプライン
曲線は \(S(0) = P_0\) となり、
曲線の始点が最初の制御点と一致します。
具体例: 一様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} \)
\( t \in [0, 1], i = 1, 2, \ldots, m-2\)
有理B-スプライン
有理B-スプラインは、各制御点に重みを付けたものです。NURBS(非一様有理B-スプライン)は、この概念を拡張したもので、さらに柔軟な形状表現を可能にします。
B-スプライン曲面
B-スプライン曲面は、u方向とv方向の2つのパラメータを持つ曲面です。\(n_u\) 次、 \(n_v\) 次のB-スプライン曲面は、以下の式で表されます。
\( \mathbf{S}(u,v) = \sum_{i_u=0}^{m_u-n_u-2} \sum_{i_v=0}^{m_v-n_v-2} \mathbf{P}_{i_u,i_v} b_{i_u,n_u}(u) b_{i_v,n_v}(v) \)
ここで、\(u \in [u_{n_u}, u_{m_u-n_u-1}], v \in [v_{n_v}, v_{m_v-n_v-1}]\) です。
ノットや基底関数は
曲線の場合と同様です。制御点の数は \((m_u - n_u - 1)(m_v - n_v - 1)\) 個となります。
まとめ
B-スプライン
曲線は、その柔軟性と制御性から、様々な分野で活用されています。区分
多項式による局所的な制御、制御点とノットによる形状調整など、多くの特徴を持っています。ベジェ
曲線やNURBSとの関連も深く、より高度な形状表現を可能にする重要な技術です。