2016-09-02 10 views
0

私はゲームを開発しています。ユーザーは指でカーブを描き、ユーザーのタッチポイントを取得します。ユーザータッチポイント間の滑らかな曲線を描くにはどうすればいいですか?

これらの点の間に曲線を描きたいと思います。それらは散在していて、キャンバスを使用してそれらの間に線を描くと、結果は滑らかな曲線ではありません。

私は、これらのポイントを通して滑らかな曲線を描画する方法を探しています(他のポイントと同じ傾向ではないポイントの一部を変更または削除することによって)。

誰でも手伝ってもらえますか?

は、ここで私は、私は、Adobe PhotoshopやIllustratorの、あなたは追加より多くのポイントから学んだように、私は

+0

[ベジエ曲線(https://en.wikipedia.org/wiki/B%C3%A9zier_curve)。それを見て、利用可能なリソースをたくさん。 「適合しない」点を移動または削除するには、それ自体が科学であり、点に関する統計分析をかなり必要とします...これはおそらくこの段階では問題にはならないでしょう。 – ppeterka

+0

@ppeterkaありがとうございますが、それは私のゲームが正確にユーザーのタッチパスを描く必要があります。 – MehDi

+0

一連のベジェ曲線を使用して一連の点を接続する[スプライン](https://www.particleincell.com/2012/bezier-splines/)について学びます。あなたのカーブがギザギザになっているような多くの点から出発する場合は、いくつかの点を犠牲にして、[経路簡略化アルゴリズム](http://mourner.github.io/simplify-js/)を適用することができます。 – markE

答えて

0

を意味するものを表示するようにpictureを追加し、より多くのギザギザの画像が見えます。絵を描くときは、他のすべての点をスキップすることができます。これにより、ユーザーが急に移動すると図面が不正確になる可能性があるため、スキップした点が近いか遠いかを確認できます。

final int len = pointsX.length, far = 50; 
for (int i = 0; i < len; i++) 
{ 
    if (i % 2 == 0) //If even, draw 
    { 
     //Draw code 
    } 
    else if (Math.abs(pointsX[i] - pointsX[i-1]) > far || Math.abs(pointsY[i] - pointsY[i-1]) > far) 
    { //If the index is odd, check if the distance from the current to the last point is far. 
     //If it is far, draw. If not far, skip the draw, so it doesn't appear as jagged. 
     //Draw code 
    } 
} 
+0

ありがとう、私は過去に同じアイデアを持っていた、それぞれ2つの1つのポイントをスキップし、それは良い結果を持っていませんでした。しかし、2点のチェック距離のアイデアは、私は後でそれを試し、結果を通知します。他の解決策の横にこのアプローチを使用するとよいでしょう:)もう一度感謝します。(そして悪い英語のために申し訳ありません) – MehDi

+0

ああ、それは助けになりませんとにかく、ギザギザの点を修正する必要があります – MehDi

関連する問題