Tgif FAQ - スプライン曲線


注意:

このページは、 Tgif ホームページ にある FAQ のページ を、竹野研究室 (主に竹野) が日本語に翻訳したものです。 オリジナルサイトの作者 (Bill Cheng 氏) の許可の元、ここに公開します。

FAQ 以外のページへのリンクは、 ほとんどがオリジナルページへのリンクになっていますので、 日本語訳はされていません (ただし、そのうち主なものは今後日本語訳することも考えています)。 また、ここに書かれているリンク先やソフトウェアなどの情報は、 書かれてからかなり年月が経っていますので、 リンク切れになっていたり、 現在の状況には合わない情報である可能性もあります。

この日本語訳のページに関する意見や質問は、 オリジナルサイトの作者ではなく、 竹野 にお願いいたします。

(05/31 2017)

このページのオリジナルサイト: http://bourbon.usc.edu/tgif/faq/splines.html

目次へ戻る


 
tgif が描く開スプライン曲線オブジェクトは Bézier 曲線ですか ? そうでなければ一体何ですか ?
ええと、tgif は一般には Bézier 曲線は本当に描いてなくて、 制御点が 3 つ以下の場合は、tgif が描いているのは、 2 次 Bézier 曲線 です。

n (> 3) 個の制御点がある場合は、tgif は n-2 個の曲線をつないで、全体として連続で、 一階微分もすべての点で連続 (近似) な一本の曲線を描きます。 この場合おのおのの部分的曲線は完全に 3 個の制御点を持ちますので、 その部分は 2 次 Bézier 曲線 として描きます。 よって、tgif が描くのは 区分的 2 次 Bézier 曲線 だと言っていいでしょう。

以下は、n > 3 に対して、 n-2 個の部分曲線がどこからくるかの基本を示しています。 n = 5 に対する例で説明します。

まず、線種を直線に変更し、図 A のように n 個の元の制御点につながる n-1 個の線分を取ります。

Figure A
 
図 A: 元の n=5 制御点を n-1=4 個の線分でつなぐ

図 B で見られるように、 内部の n-3 個の線分の中点と元の 2 端点を取ります。 それらが 2 次 Bézier 曲線に対する端点になります。

Figure B
 
図 B: 内部の n-3=2 個の線分の中点 (赤) と元の 2 端点 (青)

これは、tgif が図 2 の隣接するすべての 2 点の間に 2 次の Bézier 曲線を書くことを示しています。 よって、n-2 個の 2 次 Bézier 曲線ができます。 隣接するこれらの 2 点 (P1, P2 と呼ぶことにします) すべての間に頂点 (P3 と呼びます) があることに注意してください。 これは、元の tgif スプラインオブジェクトの制御点になります。 tgif はあらかじめ 3 個の制御点から 2 次 Bézier 曲線を 書く方法を知っています (このページの先頭を見てください) ので、 tgif は n-2 個の 2 次 Bézier 曲線を それと同じアルゴリズムを使って描きます。 以下は、制御点 P1, P3, P2 を持つ (近似) 2 次 Bézier 曲線を描くのに tgif が利用する アルゴリズムのより詳細な説明です。

制御点 P1, P3, P2から 2 次 Bézier 曲線を描く基本的なアルゴリズムを、以下の図 C に示しています。 2 次 Bézier 曲線は赤で示しています。 この曲線は、点 P1 で線分 P1-P3 に接し、 点 P2 で線分 P2-P3 に接することに注意してください。

Figure C
 
図 C: 制御点 P1, P3, P2 による 2 次 Bézier 曲線を赤で示しています。

P4 は線分 P1-P3 の中点で、 P5 は線分 P2-P3 の中点で、 さらに P6 は線分 P4-P5 の中点です。 このアルゴリズムは、2 つの 2 次 Bézier 曲線を 再帰的に描画します。 一方は制御点 P1, P4, P6 を持ち、 一方は制御点 P2, P5, P6 を持ちます。 明らかに、この曲線自身とその 1 階微分は点 P6 で連続になっています。図 B のアルゴリズムを使うことで、 図 D, E, F の 3 つの 2 次 Bézier 曲線が表れます。

Figure D
 
図 D: 2 次 Bézier 曲線の最初の断片

Figure E
 
図 E: 2 次 Bézier 曲線の 2 つ目の断片

Figure F
 

図 F: 2 次 Bézier 曲線の 3 つ目の断片

図 D, E, F を重ねた結果が、下の図 G です。

Figure G
 
図 G: それらを全部一度に表示。