Grasshopperのスプライン補間について -その1-

Grasshopper

お久しぶりです~休みの日に、Grasshopperのスプライン補間について調べたのでメモしておきます。

Interpolate Componentの使い方

スプライン補間を行うコンポーネントはInterpolate コンポーネントです。

こんなやつ

入力と出力はこんな関係になっています。

入力

  • V:点群
  • D:スプライン補間の次数
  • P:曲線が閉じているかどうか
  • K:ノットスタイル(スプライン補間の種類)  

出力

  • C:カーブ
  • L:カーブの長さ
  • D:ドメイン(カーブの媒介変数表示したときのパラメータの取る範囲)    

この入力をそろえれば、点群を通る滑らかな曲線が得られます。スプラインの次数Dは3が一般的だと思います。

ノットスタイルで曲線が変化する。

ここで重要なのがノットスタイル (knot style)という入力で、この入力次第では保管される曲線が大きく異なります。
個人的にはknot vectorってB-SplineとかNURBSにしか使わないんじゃ?なんじゃこれぇぇ?と思ったので、(ただの私の勉強不足ですが)
かなりニッチな内容ですが説明していきたいと思います。

次の3種類のノットスタイルが使えます。

使えるノットスタイル

  • 0のときUniform Spacing
  • 1のときChord Spacing
  • 2のときSqrt(Chord) Spacing   

下の図のようにつないでみると、

スプライン曲線は次のようになります。

青がUniform Spacing
赤がChord Spacing
黒がSqrt(Chord) Spacingの結果になります。

想像以上に全然違いますね!しびれるぅ!

違いはEvaluate Curve でわかる。

この3つの曲線の媒介変数 t の取る範囲を 0~1に正規化(Reparameterize)して t=0.25 としてみましょう。

すると、Uniform Spacingの場合だけ、補間点と t=0.25の値が等しいことがわかります。つまりノットスタイルは、補間点間の距離関係を媒介変数空間に写像する方法を表しています。

Chord Spacingの場合、弦の長さの比によってtの値が決まります。左から2個目の補間点を表す媒介変数 t

(1)   \begin{equation*}t = 500 / (500 + 1500 + 2000 + 500 ) = 1/9 = 0.1111 \end{equation*}

またSqrt(Chord)の場合は弦の長さの平方根を取った時の値の比によってtの値が決まります。左から2個目の補間点を表す媒介変数 t

(2)   \begin{equation*}t = \sqrt{500} / (\sqrt{500} + \sqrt{1500} + \sqrt{2000} + \sqrt{500} ) = 0.17446 \end{equation*}

となります。

このため、補間点の間隔に大きな差がある場合にノットスタイルの選択により、補間部分の曲線への影響が大きくなります。

まとめ

  • GrasshopperではInterpolate Componentでスプライン補間ができる。
  • Interpolate Componentは3つのオプションがありオプションによって曲線の表現が変化する。
  • Chord Spacing , Sqrt(Chord) の場合は弦の長さ、弦の長さの平方根の値が媒介変数を決定する際に利用される。   

自分で書いといてあれですが誰が得するねん笑

とはいえ、よくわかっていないものをわかっていないまま使うというのはエンジニアとしてまずいですよね。もちろん使い方、重要度によりけりですが。

次の記事ではこのオプションについて数学的に書いてみようと思います。

コメント

タイトルとURLをコピーしました