2009-07-06 27 views
13

catmull-romスプラインに関する最も詳細な情報を掲載しているこのサイトから:http://www.mvps.org/directx/articles/catmull/これは、スプラインを作成するために4つのポイントが必要であることに言及しています。しかし、点p0と点p3が点p1と点p2の間の値にどのように影響するかについては言及していない。Catmull-Romスプライン - どのように機能するのですか?

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

もっと一般的な質問は、catmull ROMスプラインでどのように接線を計算するのですか?スプライン上の2つの点(0.01、0.011など)を取り、ピタゴラスに基づいて接線を取得する必要がありますか?

+0

正常キャットマル - ロムも問題となり得るループと自己交差を起こしやすい方程式の導関数を取る任意の点における接線を計算する

。ここで示される求心パラメタリゼーションの使用を強くお勧めします:http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

答えて

8

式2を見てください。これは、コントロールポイントが線にどのように影響を与えるかを示しています。 P1からP2までの曲線に沿って点をプロットするために点P0P3が等式に入ります。また、t == 0P2の場合は、の場合、方程式はP1になります。

この例の式は一般化できます。あなたがポイントR0R1を持っている場合は、... RNは、あなたはP0 = RK - 1P1 = RKP2 = RK + 1P3 = RK + 2と式2を使用してRKRK + 1の間に点をプロットすることができます。

あなたはR - 1RN + 1ためで立つために余分な制御点を追加しない限り、あなたはR0からR1またはRN - 1からRNにプロットすることはできません。一般的な考え方は、シーケンスの先頭と末尾に追加する点をすべて選択して、スプラインを計算するためのすべてのパラメータを指定できることです。

コントロールポイントの1つをドロップすることで、2つのスプラインを結合することができます。あなたは、彼らがR0R1、...、RN - 1S1S2、... SMに参加することができR0R1、...、RNS0S1、... SMを持っていると言います。ちょうど2

6

Wikipedia articleはもう少し深く入ります。スプラインの一般的な形式は、入力として、関連する接線ベクトルを持つ制御点を2つ取ります。共通制御点の接ベクトルが等しい場合には、追加のスプラインセグメントを追加することができ、C1連続性が維持されます。

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

、制御点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の接ベクトルは、それらの間の補間セグメントの形状に影響します。

+1

私はごめんなさいもし私が何かを見逃しているのですが、記事のどこにその式が書いてあるのかを指摘できますか? http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_splineに別のものがあります。 (私は数学ではそれほど良いことではありません。 –

関連する問題