空間内の任意のポイントのシーケンスが与えられた場合、それらの間でスムーズな連続補間をどのように生成しますか?
2Dおよび3Dソリューションは大歓迎です。任意の粒度でポイントのリストを生成するソリューション、およびベジェ曲線の制御ポイントを生成するソリューションも高く評価されています。
また、ポイントを受け取ったときに曲線の初期セクションを近似できる反復解を見ると、それを使って描画できるので便利です。
空間内の任意のポイントのシーケンスが与えられた場合、それらの間でスムーズな連続補間をどのように生成しますか?
2Dおよび3Dソリューションは大歓迎です。任意の粒度でポイントのリストを生成するソリューション、およびベジェ曲線の制御ポイントを生成するソリューションも高く評価されています。
また、ポイントを受け取ったときに曲線の初期セクションを近似できる反復解を見ると、それを使って描画できるので便利です。
Catmull-Rom スプラインは、すべての制御点を通過することが保証されています。これは、他のタイプのスプラインの中間制御点を調整しようとするよりも便利だと思います。
Christopher Twigg によるこのPDFには、スプラインの数学の簡単な紹介があります。最良の要約文は次のとおりです。
Catmull-Rom スプラインには、C1 連続性、ローカル制御、および補間がありますが、制御点の凸包内にはありません。
別の言い方をすれば、ポイントが右への急な曲がりを示している場合、スプラインは右に曲がる前に左にバンクします (そのドキュメントに例の写真があります)。これらのターンのきつさは制御可能です。この場合、マトリックスの例で彼の tau パラメータを使用します。
ダウンロード可能な DirectX コードを使用した 別の例を次に示します。
1 つの方法はラグランジュ多項式です。これは、指定されたすべてのデータ ポイントを通過する多項式を生成する方法です。
大学の最初の年に、2D でこれを行うための小さなツールを書きました。このページで見つけることができます。ラグランジュ ソルバーと呼ばれます。ウィキペディアのページにもサンプル実装があります。
それがどのように機能するかは次のとおりです。 n 次の多項式 がp(x)
あります。ここで、n はポイントの数です。は下付き文字、a_n x^n + a_(n-1) x^(n-1) + ...+ a_0
べき乗です。次に、これを一連の連立方程式に変換します。_
^
p(x_1) = y_1
p(x_2) = y_2
...
p(x_n) = y_n
上記を拡張行列に変換し、係数 を解きa_0 ... a_n
ます。次に、すべてのポイントを通過する多項式があり、ポイント間を補間できるようになりました。
ただし、曲率などを調整する方法がないため、これは目的に合わない場合があります。変更できない単一のソリューションに固執しています。
Bスプラインを確認する必要があります。ベジェ曲線に対するそれらの利点は、各部分がローカルポイントにのみ依存することです。したがって、ポイントを移動しても、「遠い」はスプラインのパラメータによって決定される、遠いカーブの部分には影響しません。
ラグランジュ多項式の問題は、ポイントを追加すると、曲線の一見任意の部分に極端な影響を与える可能性があることです。上記のような「局所性」はありません。
私は同じ問題を思いつき、先日何人かの友人とそれを実行しました。サンプルプロジェクトをgithubで共有したいと思います。
https://github.com/johnjohndoe/PathInterpolation
お気軽にフォークしてください。
aribtrary(ただし最終的な)ポイントのセット間を補間(およびexrapolate)するためのいくつかのアルゴリズムがあります。数値レシピを確認する必要があります。それらには、これらのアルゴリズムのC++実装も含まれています。
残念ながら、ラグランジュまたは他の形式の多項式補間は、任意の点のセットでは機能しません。それらは、xなどの1次元のセットでのみ機能します
x i < x i+1
飛行機の飛行経路など、各点が (経度、緯度) のペアである任意の点のセットについては、現在の経度、緯度、および速度を使用して飛行機の旅を単純にモデル化する方がよいでしょう。次のウェイポイントまでの距離に応じて、飛行機が旋回できる速度 (角速度) を調整することで、スムーズなカーブを実現できます。
結果として得られる曲線は、数学的に重要ではなく、ベジェ コントロール ポイントも得られません。ただし、このアルゴリズムはウェイポイントの数に関係なく計算が単純であり、任意の粒度で補間されたポイントのリストを生成できます。また、ポイントの完全なセットを前もって提供する必要はありません。必要に応じてセットの最後にウェイポイントを追加するだけです。
Unixスプラインコマンドを見たことがありますか? それはあなたが望むことを強制することができますか?
グーグル「直交回帰」。
最小二乗法は適合線と各 f(x) の間の垂直距離を最小化しようとしますが、直交回帰は垂直距離を最小化します。
補遺
ノイズの多いデータが存在する場合、由緒あるRANSACアルゴリズムもチェックする価値があります。
3D グラフィックスの世界では、NURBS が人気です。詳細情報は簡単にグーグルで検索できます。