web-dev-qa-db-ja.com

求心性のCatmull–Romスプラインはどのように機能しますか?

Catmull-Romスプラインに関する最も詳細な情報があると思われる このサイト から、スプラインを作成するには4つのポイントが必要であるようです。ただし、ポイントp0とp3がp1とp2の間の値にどのように影響するかについては触れられていません。

もう1つの質問は、連続スプラインをどのように作成するかです。 p4 = p2とすると、点p1、p2をp4、p5と連続するように定義するのと同じくらい簡単でしょうか(つまり、p0、p1、p2、p3、p4、p5、p6、...、pNがあると仮定します)。 )。

より一般的な質問は、Catmull-Romスプラインの接線をどのように計算するかです。これらの入力値が与える位置座標を前提として、スプライン上の2つのポイント(たとえば0.01、0.011)を取得し、ピタゴラスに基づいて接線を取得する必要がありますか?

17
tweetypi

ウィキペディアの記事 もう少し深く掘り下げます。スプラインの一般的な形式は、関連する接線ベクトルを持つ2つの制御点を入力として受け取ります。次に、共通の制御点での接線ベクトルが等しい場合、スプラインセグメントを追加できます。これにより、C1の連続性が維持されます。

特定のCatmull-Rom形式では、中間点での接線ベクトルは、隣接する制御点の位置によって決定されます。したがって、複数の点を通るC1連続スプラインを作成するには、最初と最後の制御点に制御点のセットと接線ベクトルを指定するだけで十分です。標準的な動作は、P0の接線ベクトルにP1-P0を使用し、PNのPN-PN-1を使用することだと思います。

ウィキペディアの記事によると、制御点Pnでの接線を計算するには、次の方程式を使用します。

T(n) = (P(n - 1) + P(n + 1)) / 2

これはあなたの最初の質問にも答えます。 4つの制御点P1、P2、P3、P4のセットの場合、P2とP3の間の値を補間するには、4つの制御点すべてからの情報が必要です。 P2とP3自体が、補間セグメントが通過する必要のあるエンドポイントを定義します。 P1とP3は、補間セグメントが点P2で持つ接ベクトルを決定します。 P4とP2は、セグメントが点P3で持つ接線ベクトルを決定します。制御点P2とP3の接線ベクトルは、それらの間の補間セグメントの形状に影響を与えます。

6
Eric