2012-06-25 12 views
5

Tengo 2 objetos de ruta en mi código de Android. He intentado todo el camino para comprobar el clima estas trayectorias se cruzan o no, pero no puede hacerlo. Cómo puedo verificar si los caminos están cruzados o no. Apreciar cualquier buena respuesta ..... Gracias ,Intersección de ruta en android

Respuesta

4

echar un vistazo a Region.op

Yo no lo he probado pero sugeriría a utilizar:

Region.setPath(Path path, Region clip); 

para obtener una región de ambos de sus caminos, y después se puede utilizar:

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

para comprobar si hay intersección ...

+1

¿La región creará un rectángulo que contenga la ruta correcta? Mi camino es tener curvas. Así que no creo que crear una región sea efectivo –

+4

no, no solo crea un rectángulo que contiene la ruta. Eche un vistazo a la documentación: "Esto produce una región que es idéntica a los píxeles que dibujaría la ruta (sin antialiasing)." " – Dirk

+0

qué devolverá el op() si la región1 contiene toda la región2 y su límite/esquema no se cruza? Quiero decir, cómo comprobar los dos casos separados, 1.Región intersección y 2. Trayectoria intersección – usman

6

La respuesta dada por Dheeraj tiene la respuesta a su pregunta:

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

Aquí es una copia y pega de su respuesta:

Otro método que se me ocurre trabajará con objetos simples que pueden construirse usando Caminos.

Una vez que tenga dos objetos cuyos límites están representados por los caminos, es posible que intente esto:

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! 
} 

vez que tenga sus objetos como las rutas, se puede dibujar directamente mediante drawPath(). También puede realizar movimiento transformando la ruta.

Según mi entender, la variable "clip" en el código anterior debe ser el cuadro delimitador de la ruta. Para fines generales, uso

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

Donde el ancho y la altura del diseño pueden ser del tamaño de su lienzo o actividad o lo que sea.

6

De API 19 en adelante, Path ahora tiene un método op().

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

El valor de retorno indica el éxito de la operación, no si se cruzan o no. Para verificar la intersección, debe ver si el resultado es Vacío(). interseca regiones cerradas, no caminos en sí. Prueba rápida: construye una polilínea angular como una ruta, luego una línea de ruta única que se encuentra dentro del ángulo, sin cruzarlo. Intercúlalas y observa. –