2017-02-18 18 views
3

既知の終点(p0とp3)とノイズの多い2次元データのベジェ曲線をフィットさせたい。これは、従来の4点ベジェ曲線適合よりも簡単な問題のように思えますが、わかりにくいです。既知の終点を使ったベジェ曲線近似

誰かが、制御点p1とp2の最適な値を見つけるために既存のコードまたはアルゴリズムを指摘できますか?

Bezier curve fitting

編集:私はベジェ曲線に合うようにしようとしている点をマウスで描いた曲線から来ている(ペイントブラシで何かを描く、記録されたポイントの数百があるかもしれないと想像1回の長いストロークで)。アンカーポイントp0とp3は事前に作成されていますが、ベジェがマウスでスケッチしたカーブの形状に合うようにコントロールポイントp1とp2を計算する必要があります。

答えて

2

"Approximation of data using cubic Bezier curve least square fitting"という名前の論文が、私が探している正確なものを計算するアルゴリズムを記述する "M.Khan"によって見つけました。

javascriptでの実装は簡単でした。それはかなり良く機能し、高速ですが、結果として得られるベジェ曲線は完璧ではありません。私のコードではバグかもしれませんが、より良いカーブは、データbezier curve creationによく合うようにベジェ曲線のマッチングポイントを繰り返し調整することによって得られると思われます。

編集: newton-raphsonを使用すると、ベジェ曲線の個々のt値を最適化することができます。それを行った後、カーブは、自己交差しない点がほんの少ししかないカーブには少なくともぴったりですが、さらにテストをしなければなりません。 Newton step optimization of bezier t-values

+0

catmull-romスプラインを代わりに使用するのはなぜですか?まだ立方体のポリベジエですが、「それらの周りの並べ替え」の代わりに*の*のポイント。 –

+0

この考え方はベジェ曲線に依存するベクトル描画ソフトウェアでこれを使用して、この場合スプラインが機能しないようにすることでした。 – filip

+0

の場合を除き、Catmullのローマ字はcubic poly-Bezierに相当します(各CRセクションは、CRスプラインまたは3次ベジェ曲線のいずれかで表すことができる、hermiteスプラインです。関数、または補間のシーケンスと同じもの、異なるもの、同等のもの、表現)、一度CRスプラインを作成すると、その座標を明示的な3次ベジェのシーケンスに変換します(http://pomax.github .io/bezierinfo /#catmullconv)(変換ルールのセクションの最後までスクロールしてください) –

関連する問題