2012-06-25 4 views
5

У меня есть 2 объекта пути в моем коде Android. Я пробовал полностью проверить погоду, эти пути пересекаются или нет, но не в состоянии это сделать. Как я могу проверить погоду, пересечения пересекаются или нет. Цените любой хороший ответ ..... Спасибо,Пересечение пути в android

ответ

4

имеют вид на Region.op

Я не пробовал, но я бы предложил использовать:

Region.setPath(Path path, Region clip); 

получить регион от оба ваших путей и после этого вы можете использовать:

if (region1.op(region2,Region.Op.INTERSECT)) { 
    // intersection 
} 

для проверки пересечения ...

+1

Регион создаст прямоугольник, содержащий путь справа. Мой путь имеет кривые. Поэтому я не думаю, что создание региона будет эффективным. –

+4

Нет, он не только создает прямоугольник, содержащий путь. Взгляните на документацию: «Это создает область, которая идентична пикселям, которые будут рисоваться по пути (без антиалиасинга)». « – Dirk

+0

что будет возвращено op(), если region1 содержит всю область2 и их границу/outline не пересекается? Я имею в виду, как проверить два отдельных случая: пересечение 1.Region и 2. Пересечение пути – usman

6

Ответ дается Дираджем есть ответ на ваш вопрос:

https://stackoverflow.com/a/9918830/1268168

Вот копия и паста его ответ:

Другой метод, который я могу думать будет работать с простые объекты, которые могут быть созданы с использованием путей.

После того, как у вас есть два объекта, границы которых представлены пути, вы можете попробовать это:

Path path1 = new Path(); 
path1.addCircle(10, 10, 4, Path.Direction.CW); 
Path path2 = new Path(); 
path2.addCircle(15, 15, 8, Path.Direction.CW); 

Region region1 = new Region(); 
region1.setPath(path1, clip); 
Region region2 = new Region(); 
region2.setPath(path2, clip); 

if (!region1.quickReject(region2) && region1.op(region2, Region.Op.INTERSECT)) { 
    // Collision! 
} 

После того, как у вас есть свои объекты Путей, вы можете сделать их непосредственно с помощью drawPath(). Вы также можете выполнять движение путем преобразования() по пути.

Насколько я понимаю, переменная «клип» в приведенном выше коде должна быть ограничивающей рамкой пути. Для общих целей я использую

Region clip = new Region(0, 0, layoutWidth, layoutHeight); 

Где ширина и высота макета могут быть размером вашего холста или деятельности или что-то еще.

6

Начиная с API 19, Path теперь имеет метод op().

boolean intersects = path.op(p1,p2,Path.Op.INTERSECT) 
+1

Возвращаемое значение указывает на успешность операции, а не на то, пересекаются они или нет. Чтобы проверить пересечение, вам нужно увидеть, был ли результат isEmpty(). Быстрое тестирование: постройте ломаную линию как путь, затем один путь линии, который находится внутри угла, а не пересекает его. Пересеките их и увидите. –

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