こんにちは、トライです。
今回はB-spline曲線について詳しく解説します。
B-spline曲線やNURBS曲線は、デザインの分野では形状表現手法として最もよく用いられる関数です。
前回公開したIsogemetric Analysisにおいても、構造解析モデルの形状表現手法としてB-spline曲線を用います。
また本記事では、B-spline曲線とよく比較されるベジェ曲線との違いについても触れていきます。
ぜひ最後までお読みください。
- B-spline基底関数、B-spline曲線について知りたい
- Isogeometric Analysisと有限要素解析との違いが知りたい
- ベジェ曲線とB-spline曲線の違いが分からないので解説してほしい
B-spline関数とは

B-spline関数とは「Basis-spline関数」の省略形です。
一般的な有限要素解析が構造体を要素に分割するのに対し、B-spline関数は構造体をセグメントやパッチに分割します。
つまり、有限要素解析におけるパラメータ空間は、下図(左)のようにある特定の要素へ投影されます。
それに対しB-spline関数のパラメータ空間は、下図(右)のように物理領域内に複数の要素セグメントもしくはパッチを生成します。
B-spline関数のパラメータ空間から生成された要素パッチは、有限要素解析における要素分割と同じ意味合いとなります。
要素の種類や材料が同じ場合、比較的単純な領域のほとんどはひとつのパッチで表現することができます。

出典:『Isogeometric Analysis: Toward Integration of CAD and FEA』
B-spline基底関数

ノットベクトル
B-spline 曲線で重要となる成分として、ノットベクトル(knot vector)というものが存在します。

そもそもノットって何?
先ほど、曲線(曲面)は小さな曲線(曲面)単位の集合体で、小さな曲線(曲面)単位をセグメント(パッチ)と呼ぶことを説明しました。
曲線(曲面)全体において、セグメント(パッチ)による境界位置=どこで分割されているのかを表すのがノットベクトルです。
ノットベクトルはパラメータ領域内における座標の非減少群で、Ξ = { ξ1, ξ2, … , ξi, … , ξn+p+1 } と表されます。
- ξi(ギリシャ文字で読み方は「クサイ」):i 番目のノット
- p:B-spline関数の次数
- n:B-spline関数を構成するために用いる基底関数の数
またノットベクトルは途中のノットを同じ値にする(多重にする)ことで、ある特定の制御点に近い場所を通過させることも、折れ(カスプ : cusp)を表現することも可能です。
更に、ノットベクトルの中でp 個のノットが重複しているとき、B-spline曲線が制御点を通過します。
このように、ノットの値はB-spline関数の性質に重要な意味を持ちます。

ちょっと分かりにくいと思いますので、後で具体的なB-spline曲線を見ながらおさらいします。
B-spline基底関数
B-spline 基底関数は以下のような漸化式で表されます。

これをCox-de Boor (Cox, 1971; de Boor, 1972) の漸化式と言います。
この式に等間隔の(一様の)ノットベクトルを適用すると、以下のような基底関数が得られます。
次数pが 0 もしくは 1 の場合、基底関数は線形の有限要素関数と同じ結果が得られ、p = 2 以上で異なる結果が得られます。



もうひとつの特徴は、「p次の関数は要素境界(=ノット)をこえてp-1階微分可能」という特徴があります。
ノットベクトルに多重度の概念を導入することで、より滑らかな形状表現が可能となります。
例として4次のB-spline基底関数を以下に示します。
B-spline基底関数の次数 p = 3、ノットベクトルは Ξ = { 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 }としています。

この例では、それぞれの要素境界において4種類の異なる連続性を有する基底関数が存在しています。
ξ = 1 位置において、ノットベクトル内にノットはひとつしか存在しないため、十分な連続性を有します。(Cp-1=C3)
それ以降のそれぞれの要素境界(内部ノット位置)では多重度がひとつずつ増えていき、それに伴い曲線の級数はひとつずつ減っていっています。
つまり、ノットの多重度が増えると、補間する関数の数が減少します。
例えば、ξ = 1では4種類の関数から補間されていますが、ξ = 4 では1種類の関数でしか補間されていません。
ξ = 4 位置のように同じ値のノットが4個重複しているとき、基底関数はCp-4 = C4-4 = C0級関数となり、曲線はカスプとなります。
先ほどの例では、ノットベクトルは ξ = 1 および ξ = 5 でノットが p+1 個重複しています。
その結果、曲線は C-1 級(関数が不連続)となり、領域が完結します。
つまり、領域の端部のノットは必ず曲線の次数+1個重複させる必要があります。
B-spline曲線

ここからは具体的にB-spline基底関数と、それにより得られるB-spline曲線を見て理解を深めていきます。
以下に2次B-spline曲線とその基底関数を示します。


- 制御点1と制御点8位置ではノットの多重度が3(次数p+1)となっており、領域が完結している。
- 制御点6位置ではノットの多重度が2(=次数p)となっており、曲線が折れ(カスプ)ている。

ここで、左図の中に初登場する「制御点」「制御多角形」について簡単に解説します。
制御点
B-spline曲線の制御点は有限要素解析における節点と同じ意味合いで、B-spline基底関数に乗ずる係数ベクトルとなります。
ただし、有限要素解析では要素が必ず節点を通るのに対し、B-spline曲線の場合、要素は端点以外は基本的に制御点を通過しません。
制御多角形
制御点を線形補間したもの(単純に直線で結んだもの)を制御多角形 (コントロールポリゴン:control polygon) と言います。
2次元要素や3次元要素の場合は、制御ネット(コントロールネット:control net)もしくは制御格子(コントロールラチス:control lattice)と言います。
B-spline曲線
B-spline 曲線は従来の有限要素解析と同様に、B-spline基底関数の線形的な重ね合わせにより表現することができます。
n 個の基底関数 Ni,p (i = 1, 2, … , n)と制御点 Pi を用いて、B-spline曲線 C(ξ)は以下の式で表されます。

ベジェ曲線との違い

ここで、建築分野において形状表現によく用いられているベジェ(Bezier)曲線との違いについて簡単にまとめます。
ベジェ曲線は制御点をB0, B1, … , BN-1とすると、以下の式で示します。


ベジェ曲線の特徴のひとつですが、ある制御点の位置を変更すると、それが曲線全体に影響を及ぼします。
また、ベジェ関数は「n+1 個の制御点を用いて n 次の曲線を表現する」という関係性があるため、制御点か曲線の次数のどちらか一方のみを自由に変更することはできません。
B-spline曲線にはそのような制約は無く、より自由な形態表現が可能となります。
さらにベジェ曲線は、セグメントの接続部分において曲率の連続性(C2連続性)は保証されていません。
ベジェ曲線でセグメントを滑らかに接続するためには、接続している端点とその隣の制御点が同じ直線上にある必要があります。
以上のように様々な制約が有りますが、ベジェ基底関数の表現方法はバーンスタイン多項式とも呼ばれ、式が比較的単純なことから、建築の形状表現に多く用いられている。
まとめ:B-spline曲線は形状表現の自由度が高い関数

今回はB-spline曲線とそれを構成するB-spline基底関数、そしてB-spline曲線とよく比較されるベジェ曲線との比較について触れました。
今回の内容をまとめると以下のようになります。
- 有限要素解析のパラメータ空間はある特定の要素に投影されるのに対し、B-spline関数は物理領域内に複数の要素セグメントもしくはパッチを生成領する。
- ノットベクトルの多重度を変えることで、より自由度の高い形状表現が可能。
- ベジェ曲線は制御点の数と曲線の次数に関係性があるが、B-spline曲線にはそのような制限がなく、より自由度が高い。
- ベジェ曲線は曲率の連続性は保証されていないが、B-spline曲線はノットの多重度を操作することで曲率の連続性が保証される。
次回以降、具体的なB-spline基底関数やB-spline曲線のMATLABコードを公開し、コード内容について解説していきます。
また、B-spline曲線よりも更に自由度の高いNURBS曲線についても今後解説予定です。
最後までご覧いただき、ありがとうございました。
コメント