Bスプラインとベジエは、ほぼ同じものを並行して発明したものです。ベジエが接線をフィッティングするアイデアから始めようとするところ。Bスプラインは、基底関数の概念から始まります。NURBスプライン(または実際には有理部分)はBスプラインの単なる一般化であり、エンジニアリングに特に関心があるので、正確な円錐断面*を記述できます。
最初に、簡単なNURBスプライン用語から始めましょう。これらの曲線の理論的根拠は、ベジエの場合とは少し異なります。まず、スパンの概念があります。スパンは、NURBSでは任意の数のスパンを持つことができることを除いて、ベジェスプライン全体とほぼ同じです。
画像1:1つの立方NURBSスパン。これは定式化では少し異例です
各スパンは、カーブ次数+ 1つの制御点**によって形成されます。各曲線は、任意の数のポイントで構成できます。連続する各スパンは、1つのポイントをドロップし、リストでさらに1ポイント取得することにより、以前のスパンからポイントを再利用します。したがって、より複雑なカーブを作成することは、カーブにポイントを追加するのと同じくらい簡単です。
注:画像の曲線は、通常は少しパラメータ化されています。これが次のセクションで何を意味するのかはわかりません。ノットの概念を取り上げるとき。これは、曲線がどのように接着するかを説明する簡単な方法です。
画像2:2つの立方体スパンが次々と続き、各スパンは4つのポイントを使用します。一緒に1つの曲線を形成します。彼らはほとんどのポイントを互いに共有しています。
これまでに、複雑さの追加に関する2つの質問におそらく答えました。しかし、私はこのスキームがベジエ曲線よりも優れた連続性を保証することを付け加えたいと思います。さらに、船体を形成する点配列を周期的にすることができます。閉じた曲線を形成します。
画像3:閉じた3次NURBSサーフェスには、ポイントと同じ数のスパンがあります。各色は1つのスパンです。
パラメータ化
この時点までは、スパンをつなぐことはベジェ曲線を「縫う」のと同じようにトリックであると言えます。しかし、違いがあります。曲線はその長さに沿ってパラメータ化されます。したがって、カーブは分離しておらず、ベジェのように各スパンでフォーム0から1を補間しません。代わりに、基になる曲線には、カスタマイズ可能なパラメーター範囲があります。パラメータはノットと呼ばれるものに保存され、各ノットはシーケンスで任意の増加する値を持つことができます。したがって、曲線全体を0〜1または0〜12の範囲でパラメータ化できます。パラメータ化も均一である必要はありません。
このパラメーター化により、曲線の形状が変わります。なぜこれが役立つのでしょうか?まああなたはカーブに沿って1つの張力を調整することができます。または、カーブの長さをUパラメータにエンコードすることもできます。特異な使い方の1つは、NURBSカーブをベジェカーブのように完全にまたは部分的に(たとえば、両端ではなく、中央ではベジエ曲線のように)動作させることです。
画像4:同じポイントの異なるノットシーケンス。緑のNURBS曲線は、パラメーター範囲が0-1ではなく0-2のベジェ曲線に対応しています。
わかりましたので、結び目は何ですか?それらは単に基底関数の範囲です。4点の3次Bスプラインには4つの補間関数があるため、8ノットが必要です。3つの関数が重なり、合計が1.0になる領域のみ、線を描くことができます。
画像5:2つの異なる基底関数(ベジエのようなものと均一なセグメントのパラメーター化)が0〜1の範囲に広がります。
これで、質問1の回答についてほとんど説明しました。範囲は定義されていません。必要に応じて基底関数を拡張できます。そして最後に、ノットベクトルは基底関数のパラメーター範囲を生成します。曲線の形状を制御するもう1つの要素があり、それは重みベクトルです。しかし、それは別の場所で語られる別の話です。
*この場合のこの有理数は、多項式で円を記述できないため、NURBS曲線が多項式である必要がないことを意味します。
**他のタイプのポイントを定義できます。