2016-05-20 5 views
0

インターネットを通じて、私は3つの制御点を与えて2次のビーチャ曲線を見つけた。しかし、私はポイントのセットを持っている場合私は何をすべきですか?ベジェ曲線:ベジェアルゴリズムで連続的な曲線を描くアルゴリズムを実装したい。

x =(1-t)*(1-t)* p [0] .x + 2 *(1-t)* t * p [1] .x + t * t * 2] .x;

y =(1- t)*(1-t)* p [0] .y + 2 *(1-t)* t * p [1] .y + t * t * p [2 ] .y;

私のプログラムでは、タッチイベントが発生し、ユーザーがタッチして画面上で指を動かすと、プログラムがカーブを描き始めます。これを私は、Androidをやっている場合は

は私がquadToを使用することができますが、私はそれを私はあなたがカーブフィッティングアルゴリズムを使用する必要があります。このため、多くのプラットフォーム

+0

使用少なくとも立方ベジエ(種々の改善、詳細については、ヘッダを参照してくださいがあります):// stackoverflow.com/a/30438865/2521214)とサブリンク... – Spektre

+0

さらに[立方ベジェに関連する] Catmull-Romカーブを使用する方が簡単です(http://pomax.github.io/bezierinfo/ #catmullconv)、ベジエが行う明示的な制御点を必要とするのではなく、カーブ上の点を使って指定することができます。 –

+0

この質問は、スムーズなタッチ動作をしたいという問題と、ベジエを使用する究極の解決策(この場合は良い解決策ではないかもしれません)をミックスしています。 – ideasman42

答えて

0

でそれをやってみたいという方だってを行うことはできません最小二乗解法を用いて繰り返し行われる。

このための一般的な参照は、グラフィックス・宝石FitCurve.cで、参照:

https://github.com/erich666/GraphicsGems/blob/master/gems/FitCurves.c

が、これは、そのどこでも静的VARSを使用して以来、ライブラリ関数としてそのように使用できない良い参照されています。


私は、スタンドアローン、単一のファイルCライブラリに(もFitCurve.cに基づく)オープントゥーンズカーブフィッティングを抽出してきた - 曲線を計算することができます。
https://developer.blender.org/diffusion/B/browse/master/extern/curve_fit_nd/intern/curve_fit_cubic.c
彼らは[私はマルチポイント線形補間を生成するにはどうすればよい?]参照...(HTTP接合するためにはるかに優れている

+0

代わりに、難しい解決策を忘れて、それらを通してCatmull-Rom曲線を作成するだけでポイントに加わることができます(アンドロイドはあなたにすべてのポイントの代わりに必要なポイントを渡すのに十分なほどスマートです。 [Ramer-Douglas-Peucker](https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm)を使用して描画したポイントを減らすと、その問題は解決されます) –

+0

右カーブフィッティングベジェカーブはカーブスムージングのためだけに重い重量のソリューションです。私はちょうどベジェ曲線について質問するので、この回答を投稿しました。 – ideasman42

関連する問題