0

B スプライン カーブ フィッティングを使用して、滑らかな曲線を 1 つ取得します。滑らかな B-spline を 2 つ取得した場合、どうすればスムーズに接続できますか。たとえば、59 個のポイント ((x0,y0,z0),...,(x58, y58, z58)) があり、2 つの適合 B スプラインがあります。1 つの B スプラインは最初の 30 ポイント用で、別の B スプラインは次の 30 ポイント用で、2 つのポイント セットは 1 つの共通点 ((x29,y29,z29)) を共有します。ポイント (x29,y29,z29) は、カーブ フィッティングにより 2 回変更され、2 つの新しい位置になります。2 つの新しい位置を単に接続すると、最終的な曲線は点 (x29、y29、z29) で滑らかになりません。現在、すべてのデータをまとめてカーブ フィッティングを実行していますが、これにより最初の 30 ポイントの滑らかなカーブが完全に変更されます。最初の滑らかな曲線の接続部分だけを変更したいと考えています。導関数をジョイントで等しくする必要があることはわかっています。私はそれを行う方法がわかりません。

4

1 に答える 1

1

B スプライン曲線または同様のもので LS フィッティングを行っているように見えますが、一般に、この方法で得られた B スプラインはデータ ポイントを通過しません。これが、2 つの B スプラインが共通点で交わらない理由です。

この問題を解決するには、入力の一部として制約を受け取るように LS フィッティング関数を拡張します。あなたの場合、これらの制約は線形であるため、問題は依然として線形です。この手順が完了したら、共通点で勾配を事前に計算し、B スプライン フィッティングの両方を共通点と共通勾配に制限できます。このようにして得られた 2 つの B スプラインは、共通点で少なくとも G1 連続になります。

そうは言っても、制約付き LS フィッティングを実装することは簡単な作業ではなく、ここでも簡単に説明することはできません。そのため、自分で「グーグル」を行う必要があります。別の解決策は、2 つの B スプラインを「微調整」して、G1 方式で接続することです。しかし、そうすると、最小二乗誤差の感覚が失われるため、確実にフィッティング エラーが増加します。「微調整」とは、B スプラインの制御点をローカルで変更することを意味していました。以下では、詳細を説明します。

2 つの B スプライン C1(t) と C2(t) があり、C1(t) の最後の 2 つの制御点が P(n-2) と P(n-1) であり、C2( の最初の 2 つの制御点がt) は Q(0) と Q(1) です。P(n-1) と Q(0) は、2 つのデータ セットの共通点 (x29、y29、z29) に近いと想定されます。B スプライン曲線を微調整するということは、P(n-2)、P(n-1)、Q(0)、および Q(1) の位置を変更して、これら 2 つの B スプライン曲線が G1 方式で交わるようにすることを意味します。これをする、

1) まず、P(n-1) と Q(0) の両方を同じ場所 (x29、y29、z29) または単に P(n-1) と Q( の中間点) に移動して G0 にします。 0)。この新しい場所を R としましょう。

2) ここで、P(n-2)、R、および Q(1) が同一線上にあるかどうかを確認します。それらがたまたま同一線上にある場合、2 つの B スプライン曲線も G1 になり、作業は完了です。それらが共線でない場合、P(n-2) と Q(1) から R を通る最適な近似直線を見つけ、P(n-2) と Q(1) をこの直線に射影し、射影された点をP(n-2) と Q(1) の新しい位置。

これらの 2 つの手順の後、これら 2 つの B スプライン曲線は G1 方式で接続する必要があります。しかし、共通ジョイントの周りの元のデータ ポイントに対する誤差は大きくなります。

于 2014-10-27T23:43:33.183 に答える