2009-08-28 13 views
2

ユーザーがスタイラスをタブレット上にドラッグすると、一連の座標が表示されます。ペンのパスをスムーズな線で近似し、後ろにサンプルポイントをいくつか残しておきたいとします。あなたはどうしますか?タブレット入力から滑らかな線を描く

つまり、ユーザーがタブレットで描画する際に、すばやく反応する行をどのように表示しますか?単に直線でドットを接続するだけでは十分ではありません。実際の描画プログラムは、サンプルポイントがどれくらい近いか遠いかにかかわらず、線をカーブさせるよりはるかに優れた仕事をします。いくつかの場合でも、スムージングの量を示す数値を与えることができます。このようなことをどこで行うことができますか?

+0

関連HTがありますtp:// stackoverflow。com/questions/3347483/writing-a-paint-program-a-la-ms-paint-how-to-interpolate-between-mouse-move-eve – kervin

答えて

2

私はこれが古い質問です知っているが、私は同じ問題を抱えていたと私は2つの異なるソリューションに付属している:ユーザーはパスポイントを挿入されたときに、ワン:最初のアプローチは2つの解像度を使用している

  • それらを直線で結ぶ。 2つ目は、ユーザーがストロークを終了したら、ラインを削除して、スプラインで描画します。それは直線より滑らかでなければならない。

  • 第2のアプローチは、以前のサンプルポイントの加重平均で新しいポイントを平滑化することです。したがって、新しいサンプルポイント[x1、y1]を直接描画するのではなく、直前にサンプリングしたポイント[x2、y2]を取得し、2つのポイントの加重平均に新しい中間ポイントを作成します。擬似コードは次のようになります。

    newPoint = [x1、y1]; oldPoint = [x2、y2];

    点2ペイント= [(x1 * 0.3)+(x2 * 0.7)、(y1 * 0.3)+(y2 * 0.7)]; oldPoint = newPoint;

    (あなたが希望するスムージングを取得するためにそれらを変更することができます:)

を、私は、これは12月13日

UPDATEを助ける願って加重平均の係数0.7と0.3ビーイング:ここではそれがあります異なる描画方法を説明する記事、良い適用することができる概念(エッジスムージング、ベジェ曲線、滑らかな関節)

http://perfectionkills.com/exploring-canvas-drawing-techniques/

0

私はこれらを(学術目的でのみ)実装する必要はありませんでしたが、ウィキペディアのinterpolationの記事を参照してください。記事から抽出

補間は、既知のデータポイントの離散集合の範囲内で新しいデータポイントを構築する方法です。

エンジニアリングおよび科学では、サンプリングまたは実験によって得られたデータ点が多く、これらのデータ点によく似た関数を作成しようとします。これは、曲線近似または回帰分析と呼ばれます。補間は、関数がデータポイントを正確に通過しなければならないカーブフィッティングの特定のケースです。

希望します。

関連する問題