非一様有理Bスプライン(NURBS)の基本


9

NURBSカーブ(後でサーフェス!)を理解しようとしていますが、その内部の仕組みの基本を理解するのに問題があります。誰かが私にいくつかのことを説明してもらえますか?私がベジェ曲線から来ているので、これら2つの間の比較は特に有用でしょう。

  1. 「合理的な基底関数は」ほんの少し(合理的)ベジェ曲線のバーンスタイン多項式のように見えます。パラメータuも0から1に変わりますか?

  2. 曲線に「ディテールを追加」する方法は?つまり、ベジエを使用して、より複雑な形状を記述する必要がある場合は、複数のベジエを単に「ステッチ」するだけです。またはそれほど頻繁ではないが、程度を上げる。NURBSの次数を増やすこともでき、いくつかのNURBSカーブを並べて配置できることを理解していますが、これはどのように行う必要がありますか?

  3. Wikipediaの記事は、少なくとも私にとっては、この「結び目ベクトル」についてあまり明確ではないようです。とにかくそれは何ですか?


これは1つの質問には少なすぎます。基本的には、このテーマに関する紹介講演を数時間で要約できます。デカステルジャヌとデブールのアルゴリズムの使用について少し詳しく説明すると、時間がかかりすぎます。
joojaa

1
したがって、質問3、5、およびおそらく6を別々の質問として分割して、より多くの食事のサイズに答えて理解できるようにしたいと思います。
joojaa 2015

@joojaa確かに、私は質問を分割することができます、ほんの1秒...
Ecir Hana

1
質問だから356は、別の質問にオフに分割しました。
Ecir Hana 2015

回答:


7

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曲線が多項式である必要がないことを意味します。

**他のタイプのポイントを定義できます。


(*)に関しては、ベジェ曲線にも同じ問題があります。問題は、曲線(両方の場合)がx = f(t)、y = f(t)として定義されていることです。ただし、tの代わりにxを使用して、単変量/明示的/ 1次元曲線(どちらの場合も)をy = f(x)として定義することもできます。有理曲線の場合、円錐曲線を表現する代わりに、サインとコサインを表現することができます(もちろんそれ以上)。NURBS / b-スプラインはその点で特別ではありません。
アランウルフ

長さについてのあなたの声明は間違っていると思います(線形関数でのみ機能しますか?)そして、長さの計算があなたの説明にどのように当てはまるのかわかりません(あなたが与えた良い情報、ただ言っただけです!)
アランウルフ

@AlanWolfeはとにかく削除しました
joojaa

最も素晴らしい!どうもありがとうございました。
Ecir Hana

誤植でしょうか?「代わりに、基になるサーフェスにはカスタマイズ可能なパラメーター範囲があります。パラメーターはノットと呼ばれるものに保存され、各ノットは次のノットよりも大きい任意の値を持つことができます。」->「代わりに、基になる曲線にはカスタマイズ可能なパラメータ範囲があります。パラメータはノットと呼ばれるものに保存され、各ノットは前の値よりも大きい任意の値を持つことができます。」ところで、「UVレンジ」の意味を教えてください。「UV」は2Dを意味します。
Ecir Hana
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.