2012-04-12 10 views
5

enter image description here Quiero saber si hay alguna manera de detectar si una ruta dibujada actualmente toca/cruza una ruta existente. La ruta existente se dibuja o parte de la imagen de fondo. También sería útil, si puedo encontrar este después de, la ruta actual está completamente dibujada. En el peor de los casos, ¿puedo hacer una comprobación píxel por píxel para ver si dos rutas se están tocando?Detección de rutas superpuestas en Android

+0

Adición de un enlace a una captura de pantalla de cómo se ve y algunas referencias a cuál es visto podrían ayudar a aclarar las cosas un poco. – erbsman

+0

Captura de pantalla agregada. – deeJ

Respuesta

0

Utilice una ruta para definir la línea, luego establezca un android.graphics.Region en esa ruta. Más tarde se les presentarán todas las regiones de unos contra otros ya sea que esté o no cruzan por

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

Esto seguramente no funcionará ya que una región es un camino cerrado, y él no está dibujando caminos cerrados en todo momento? ¿O me estoy perdiendo algo aquí? – erbsman

+0

Si dibuja algo, tendrá un ancho en ambas dimensiones xe y. Podría construir un camino cerrado a su alrededor, al menos uno pixeado en ancho. – Bondax

+0

¿Alguna idea de cómo puedo crear una ruta desde una matriz PointF []? Tengo las coordenadas de todos los puntos en este conjunto. – deeJ

0

Puede guardar las líneas en una lista, y luego verificar la línea que está dibujando contra cada línea en la lista para ver si se cruza. Encontrarás muchas respuestas sobre cómo detectar la intersección de líneas aquí en 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

Me pregunto cómo se guarda una línea en la lista. Guardo las coordenadas de todos los píxeles de la línea? – deeJ

+0

simplemente guarde un par de pares. int startX = 10; int startY = 20; int endX = 40; int endY = 50; Pair lineStart = new Pair (startX, startY); Pair lineEnd = new Pair (startX, startY); Par , Pair > line = new Pair (lineStart, lineEnd); – erbsman

+0

Esto no funcionará para una línea curva, ¿verdad? Lo siento si eso no fue implícito de la pregunta. – deeJ

Cuestiones relacionadas