2012-04-12 3 views
5

enter image description here Я хочу знать, есть ли какой-то способ определить, касается ли в данный момент пути или пересекает существующий путь. Существующий путь либо нарисован, либо частично фоновым. Было бы полезно, если я смогу найти это после, текущий путь полностью нарисован. В худшем случае, могу ли я выполнить некоторую поэтапную проверку, чтобы увидеть, касаются ли два пути?Обнаружение перекрывающихся путей в Android

+0

Добавление ссылки на скриншот, как она выглядит, и некоторые ссылки на Что видел может помочь прояснить вещи немного. – erbsman

+0

Добавлен скриншот. – deeJ

ответ

0

Используйте путь для определения строки, а затем установите android.graphics.Region на этот путь. Позже проверить все регионы друг против друга кастрированный баран они пересекаются или не

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

Это, безусловно, не работает, так как область является замкнутой дорогой, и он не рисует замкнутые пути во все времена? Или я чего-то не хватает? – erbsman

+0

Если он что-то рисует, он будет иметь ширину и в размере x & y. Он мог бы построить замкнутый путь вокруг него, по крайней мере, один из которых был бы шириной. – Bondax

+0

Любая идея, как я могу создать Path из массива 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 = new Pair (startX, startY); Пара lineEnd = новая пара (startX, startY); Пара <Пара , Пара > line = new Pair (lineStart, lineEnd); – erbsman

+0

Это не будет работать для кривых линий, верно? Простите, если это не было связано с вопросом. – deeJ

Смежные вопросы