2012-04-12 9 views
5

enter image description here現在描画されているパスが既存のパスに接しているかどうかを検出する方法があるかどうかを知りたいと思います。既存のパスは描画されるか、背景イメージの一部です。 の後にこのを見つけることができれば、現在のパスが完全に描画されることも役立ちます。 最悪のシナリオでは、2つのパスが接触しているかどうかを確認するためにピクセル単位のチェックを行うことはできますか?Androidで重複したパスを検出する

+0

で交差したりしませ天気を後でお互いに対してすべての地域をご確認ください。 – erbsman

+0

スクリーンショットが追加されました。 – deeJ

答えて

0

パスを使用して行を定義し、android.graphics.Regionをそのパスに設定します。彼らはそれを見て、見ていただきました!にいくつかの参照は、物事を少し明確に助けることができるかのスクリーンショットへのリンクを追加

region1.op(region2, Op.INTERSECT); 
+0

リージョンが閉じたパスであり、閉じたパスを常に描画していないので、これはうまくいきませんか?または私はここに何かを逃していますか? – erbsman

+0

もし彼が何かを描くならば、それはxとyの両方の次元で幅を持つでしょう。彼はそれの周りに閉じた通路を作ることができた。 – Bondax

+0

どのように私はPointF []配列からパスを作成できますか?私はこの配列のすべての点の座標を取得しています。 – deeJ

0

リストに行を保存し、リスト内のすべての行に対して描画する行をチェックして、交差しているかどうかを確認できます。ここでstackoverflowで線の交差を検出する方法についてたくさんの回答があります。

ArrayList<Pair<Pair<Integer,Integer>,Pair<Integer,Integer>>> lineList = new ArrayList<Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>>(); 

    // add all your lines to the list 
    // lineList.add(line); 

    // handle the last line 
    int startX = 10; 
    int startY = 20; 
    int endX = 40; 
    int endY = 50; 

    Pair<Integer,Integer> lineStart = new Pair<Integer, Integer>(startX, startY); 
    Pair<Integer,Integer> lineEnd = new Pair<Integer, Integer>(startX, startY); 
    Pair<Pair<Integer,Integer>,Pair<Integer,Integer>> lastLine = new Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>(lineStart, lineEnd); 

    for(Pair<Pair<Integer,Integer>,Pair<Integer,Integer>> l: lineList){ 
     // if "lastLine" intersects "l" do you stuff 
    } 
+0

リストにどのように行を保存するのだろうか?私はラインのすべてのピクセルの座標を保存しますか? – deeJ

+0

ペアのペアを保存するだけです。 int startX = 10; int startY = 20; int endX = 40; int endY = 50; ペア<整数、整数> lineStart =新しいペア<整数、整数>(startX、startY); ペア<整数、整数> lineEnd =新しいペア<整数、整数>(startX、startY); ペア<ペア<整数、整数>、ペア<整数、整数>ライン=新しいペア(ライン開始、ラインエンド); – erbsman

+0

これは曲線の場合はうまくいかないでしょうか?それがその質問から暗示されていないのであれば、残念です。 – deeJ

関連する問題