Catmull-Romスプライン曲線

提供: testwiki
ナビゲーションに移動 検索に移動

Catmull-Romスプライン(テンプレート:Lang-en)は、カーディナルスプラインの特殊な場合のひとつ。「一様な」パラメータ間隔を前提とする。3次エルミートスプラインにおいて、接ベクトルとして 𝒎k=𝒑k+1−𝒑k−12 を選択し、3次エルミートスプラインの定義式 𝒑(t)=(2t3−3t2+1)𝒑k+(t3−2t2+t)𝒎k+(−2t3+3t2)𝒑k+1+(t3−t2)𝒎k+1 にあてはめることにより、以下のCatmull-Romスプラインの式が得られる。 𝒑(t)=12[t3t2t1][−13−312−54−1−10100200][𝒑k−1𝒑k𝒑k+1𝒑k+2]

この曲線は Edwin Catmull と テンプレート:日本語版にない記事リンク にちなんで名付けられた。この手法の主な利点は、元の点セットに沿った点がスプライン曲線の制御点も構成することである[1]。

Catmull-Romスプライン曲線の例[2]

曲線の両端に2つの追加点が必要である。 一様なCatmull-Romスプラインの実装では、ループと自己交差が発生する可能性がある。 chordal および centripetal Catmull-Rom スプライン[3]実装はこの問題を解決するが、計算方法が若干異なる[4]。

コンピューターグラフィックスでは、キーフレーム間の滑らかな補間モーションを取得するために Catmull-Rom スプラインが頻繁に使用される。たとえば、離散キーフレームから生成されるカメラパスアニメーションのほとんどは、Catmull-Romスプラインを使用して処理される。これらは主に、計算が比較的容易であること、各キーフレームの位置が正確にヒットすることを保証すること、生成された曲線の接線が複数のセグメントにわたって連続していることを保証することから人気がある。

定義(CatmullとRomによる)

文献[1]は複数の方式の補間曲線の比較である。 以下のブレンディング関数のグラフや実験結果が示されており、この内『例3』がCatmull-Romスプライン曲線である[5]。

Interval Width Differentiability Type Degree of Polynomial for Cardinal Function
例1 3 1 B-SPLINE
例2 4 2 BEZIER
例3 4 1 B-SPLINE 1
例4 6 2 B-SPLINE 2

定義式は、 𝐅(t)=∑j𝐩jCjk(t) である。 𝐩j は定義点(defining point)、Cjk(t) はブレンディング関数 C0,k(t) を 0≤t<1 の区間にシフトしたものである。 以下は左から、ブレンディング関数 C0,k(t) とそのシフト Cjk(t)、曲線 𝐅(t) の例である。

ブレンディング関数は以下の基数関数(cardinal function)である。 [注 1] C0,k(t)=∑i=0k[∏j=i−kj≠0i(tj+1)]w(t+i)

線形ラグランジュ補間を使用するので k=1 であり、 C0,1(t)=(1−t)w(t)+(1+t)w(1+t) になる。 w(t) は2次一様B-スプラインの基底関数をシフトしてブレンディング関数化したものである。

以下は左から、2次一様B-スプラインのブレンディング関数と、シフト前の基底関数である。

C0,1(t) の各項のグラフは以下の通り。

この w(t) を C0,1(t) にあてはめると C0,1(t)={12t3+52t2+4t+2for−2≤t<−1−32t3−52t2+1for−1≤t<032t3−52t2+1for0≤t<1−12t3+52t2−4t+2for1≤t<2 になり、0≤t<1 にシフトして Cj1(t) を求め、行列形式にまとめると、 𝐅(t)=12[t3t2t1][−13−312−54−1−10100200][𝐩j𝐩j+1𝐩j+2𝐩j+3] となり、3次エルミートスプラインとしての定義式と一致する。

性質

B-スプライン曲線との比較

Catmull-Romスプライン曲線は定義点を通るinterpolationであるのに対し、B-スプライン曲線は制御点を通らないapproximationである[6]。

以下左から、3次一様B-スプラインのブレンディング関数とシフト前の基底関数、曲線の例である。

連続性

Catmull-Romスプライン曲線は定義および以下によりC1連続であり、C2連続ではない。 𝐅′k(1)=12[0−101][𝐩k−1𝐩k𝐩k+1𝐩k+2]=𝐅′k+1(0)=12[−1010][𝐩k𝐩k+1𝐩k+2𝐩k+3] 𝐅″k(1)=[−14−52][𝐩k−1𝐩k𝐩k+1𝐩k+2]≠𝐅″k+1(0)=[2−54−1][𝐩k𝐩k+1𝐩k+2𝐩k+3]

自己交差の発生

曲線の途中で、定義点の間隔の差が大きいと尖った形状(カスプ)や自己交差が発生する場合がある[注 2]。

以下は自己交差の例である。

ベジェ曲線への変換

ベジェ曲線への変換例(赤がベジェ曲線の制御点)
ベジェ曲線への変換例(赤がベジェ曲線の制御点)

3次ベジェ曲線の行列形式は 𝐏(t)=[t3t2t1][−13−313−630−33001000][𝐩𝐛𝐳0𝐩𝐛𝐳1𝐩𝐛𝐳2𝐩𝐛𝐳3] であることから、Catmull-Romスプライン曲線と等しくなる3次ベジェ曲線の制御点は [𝐩𝐛𝐳0𝐩𝐛𝐳1𝐩𝐛𝐳2𝐩𝐛𝐳3]=[−13−313−630−33001000]−112[−13−312−54−1−10100200][𝐩k−1𝐩k𝐩k+1𝐩k+2]=16[0600−1610016−10060][𝐩k−1𝐩k𝐩k+1𝐩k+2] である。

曲面(バイキュービック補間)への拡張

2つのCatmull-Romスプラインの直交座標積を取ることで、点のグリッドを補間する2変量サーフェスを取得できる[7]。

以下の式で表されるバイキュービックパッチとなる。 𝐅(t,u)=[t3t2t1]𝐌[𝐩11𝐩12𝐩13𝐩14𝐩21𝐩22𝐩23𝐩24𝐩31𝐩32𝐩33𝐩34𝐩41𝐩42𝐩43𝐩44]𝐌T[u3u2u1] ここで 𝐌=12[−13−312−54−1−10100200] パッチは中央の4点を補間する。隣接パッチ間は1次導関数連続となる。

テンションパラメータの拡張

テンションパラメータのキーフレーム補間に対する視覚的作用を示した例
テンションパラメータのキーフレーム補間モーションに対する視覚的作用を示した例(白丸:キーフレーム、青:τ=0.2、緑:τ=0.5、赤:τ=1.0)

接ベクトルの係数 1/2 をテンションパラメータ τ に置き換えた 𝒎k=τ(𝒑k+1−𝒑k−1) をCatmull-Romスプラインとしている場合がある[8]。

この場合の定義式は以下となる。 𝒑(t)=[t3t2t1][−τ2−ττ−2τ2ττ−33−2τ−τ−τ0τ00100][𝒑k−1𝒑k𝒑k+1𝒑k+2]

なお、τ とKochanek–Bartelsスプラインのテンションパラメータ(τKB とする)の関係は τ=1−τKB2 である[9]。

ベジェ曲線への変換例
ベジェ曲線への変換例(τ=1.0)

また、等価な3次ベジェ曲線の制御点は [𝐩𝐛𝐳0𝐩𝐛𝐳1𝐩𝐛𝐳2𝐩𝐛𝐳3]=13[0300−τ3τ00τ3−τ0030][𝐩k−1𝐩k𝐩k+1𝐩k+2] である。

脚注

注釈

テンプレート:Reflist

出典

テンプレート:Reflist

参考文献

関連項目

外部リンク

  1. ↑ 1.0 1.1 テンプレート:Citation
  2. ↑ Catmull, Rom (1974), p.325 Figure 5に基づき作成
  3. ↑ N. Dyn, M. S. Floater, and K. Hormann. Four-point curve subdivision based on iterated chordal and centripetal parameterizations. Computer Aided Geometric Design, 26(3):279–286, 2009.
  4. ↑ P. J. Barry and R. N. Goldman. A recursive evaluation algorithm for a class of Catmull-Rom splines. SIGGRAPH Computer Graphics, 22(4):199–204, 1988.
  5. ↑ Read the Docs - Uniform Catmull–Rom Splines
  6. ↑ Catmull, Rom (1974), p.319
  7. ↑ Catmull, Rom (1974), pp.322-323
  8. ↑ テンプレート:Cite web
  9. ↑ テンプレート:Cite journal


引用エラー: 「注」という名前のグループの <ref> タグがありますが、対応する <references group="注"/> タグが見つかりません