17

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)を取得し、ピタゴラスに基づいて接線を取得する必要がありますか?

4

2 に答える 2

10

式 2 を見てください。これは、制御点が線にどのように影響するかを示しています。P0点を確認し、 からまでP3の曲線に沿って点をプロットするための方程式に進むことができます。また、方程式がwhenとwhenを与えることもわかります。P1P2P1t == 0P2t == 1

この例の方程式は一般化できます。点R0R1、…がある場合、 、、およびで式 2 を使用して、とRNの間の点をプロットできます。RKRK + 1P0 = RK - 1P1 = RKP2 = RK + 1P3 = RK + 2

との代わりになる追加の制御点を追加しない限り、 からR0R1または からRN - 1へをプロットすることはできません。一般的な考え方は、シーケンスの先頭と末尾に追加する任意のポイントを選択して、スプラインを計算するためのすべてのパラメーターを自分自身に与えることができるということです。RNR - 1RN + 1

2 つのスプラインの間に制御点の 1 つをドロップすると、2 つのスプラインを結合できます。、、…、R0および、、…があるとします。これらは、、、 … 、、、、…に結合できます。R1RNS0S1SMR0R1RN - 1S1S2SM

任意の点でタンジェントを計算するには、方程式 2 の導関数をとります。

于 2009-07-06T07:05:32.987 に答える
6

ウィキペディアの記事では、もう少し詳しく説明しています。スプラインの一般的な形式は、接線ベクトルが関連付けられた 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 の接線ベクトルは、それらの間の補間セグメントの形状に影響を与えます。

于 2009-07-06T06:51:51.407 に答える