第6回 曲線の種類とその性質

オンデマンドで受講する場合は、本題に入る前に必ず連絡の動画を見てください。

ベジェ曲線

概要

動画の解説を参照

ベジェ曲線は、2個以上の制御点 \(\boldsymbol{P}_i\) で定義される曲線です。制御点の数が \(n\) 個の場合、曲線上の点は以下のように表されます (前回の内容)。
\(\boldsymbol{C}(t)\) \(=\displaystyle \sum_{i=0}^n\) \(_n C_i\) \(t^i(1-t)^{n-i} \) \(\boldsymbol{P}_i\)
ベジェ曲線は、すべての制御点を含んだ最小の凸領域の中に曲線が含まれるという性質 (凸包性) を持ちます。
つまり、こういう場合なら

曲線がこういう青い枠の中に納まるということです。


NURBS Demo (様々な種類の曲線を表現できるサイト) で制御点を動かして確認できます。
また、式の形からわかるように、ひとつの制御点を動かすと曲線全体が影響を受けます (制御点を動かしてみても確認できます。制御点から遠いほど影響は小さくなりますが)。
実際に操作してみるとわかりますが、制御点を増やしてもベジェ曲線で思い通りの形にするのはかなり難しいです。
点の計算式は比較的簡単ですが、CGなどで望みの形を作るのにはあまり向きません。

有理ベジェ曲線

概要

動画の解説を参照

有理ベジェ曲線は、ベジェ曲線の制御点の影響のしかたを係数でコントロールできるように改良したものです。制御点 \(\boldsymbol{P}_i\) のほかに重み \(w_i\) を使います。 曲線上の点は以下のように表されます。
\(\boldsymbol{C}(t)\) \(=\frac{\displaystyle \sum_{i=0}^n {_n} {C_i}t^i(1-t)^{n-i} w_i\boldsymbol{P}_i}{\displaystyle \sum_{i=0}^n {_n} {C_i}t^i(1-t)^{n-i} w_i}\) \(\) \(\) \(\)
例えば3番目の制御点の影響を大きくしたければ \(w_3\) を大きく、5番目の制御点の影響を小さくしたければ \(w_5\) を小さくする、のような使い方ができます。
普通のベジェ曲線だと「曲線をこっちに曲げたいが、制御点を動かしても思ったほど線がついてこない」ということがありますが、重みを上手く使えばこの問題が解消できます。
NURBS Demoではここの数値が重みに対応します。

B-スプライン曲線

概要

動画の解説を参照

B-スプライン曲線は、3個以上の制御点 \(\boldsymbol{P}_i\) と、ノット列 \(t_i\) で定義される曲線です。 セグメントの数が \(L\) 本、制御点の数が \(n+L\) 個の場合、曲線上の点は以下のように表されます。
\(\boldsymbol{C}(t)\) \(=\displaystyle \sum_{i=0}^{n+L-1}\) \(N^n_i(t)\) \(\boldsymbol{P}_i\)
ここで \(N^n_i(t)\) は
\(N^n_i(t) =\) \(\Large{\frac{t-t_i}{t_{i+n}-t_i}}\) \(N^{n-1}_i(t)\) \(+\Large{\frac{t_{i+n+1}-t}{t_{i+n+1}-t_{i+1}}}\) \(N^{n-1}_{i+1}(t)\)
のように、次数が1つ小さいものから再帰的に求められる関数です。最低次の関数は
\(N^0_i(t) = 1\) (\(t\) が \(t_i\) ~ \(t_{i+1}\) のとき)
\(N^0_i(t) = 0\) (\(t\) がそれ以外のとき)
で定義されます。\(N^n_i(t)\) の再帰の式は覚えなくても構いませんが、重要なのは \(t\) が特定の範囲の以外では \(N^0_i(t)\) が 0 になるということです。 このおかげで、制御点を動かしたときに影響をうける範囲が、それにとなりあったセグメントで決まる部分だけに限定されます。
つまり、ベジェ曲線と違って「せっかく一部分の形を整えたのに、別の所を動かしたらその形が崩れてしまった」ということが起こらず、望みの形を作りやすいということです。

NURBS曲線

概要

動画の解説を参照

NURBS曲線 (Non-Uniform Rational B-Spline : 非一様有理B-スプライン) は、B-スプライン曲線に重み \(w_i\) をつけたものです。 セグメントの数が \(L\) 本、制御点の数が \(n+L\) 個の場合、曲線上の点は以下のように表されます。
\(\boldsymbol{C}(t)\) \(=\displaystyle \sum_{i=0}^{n+L-1}\) \(\Large{\frac{N^n_i(t)w_i\boldsymbol{P}_i}{N^n_i(t)w_i}}\)
有理ベジェ曲線と同様に、影響を強くしたい制御点の重みを大きくすることで、形をコントロールしやすくなります。

課題1

※ 準備 : 学籍番号を入れて「入力」をクリック (タップ) してください。


NURBS Demo でアルファベット の小文字 (以下の書体) に近い曲線を作ってください。


課題1解説

課題

課題解答