2011-11-01 25 views
12

Hace un tiempo, hice una pregunta para ver si podía encontrar un par de puntos específicos en una ruta; Sin embargo, esta vez quiero saber si hay una forma de conocer todos los puntos en un camino. (No pude encontrar un método que lo hiciera, lo cual es desafortunado porque Java proporciona una forma de hacer esto, ¿no solo Android?)¿Cómo encuentro todos los puntos en una ruta en Android?

La razón por la que pregunto esto es porque tengo múltiples gráficos geométricos y quiero comparar los puntos para ver dónde se cruzan.

aprecio cualquier respuesta votos

Respuesta

2

Si ha creado un Path Esto significa que en algún momento de su código, se conoce el punto exacto (Geo). ¿Por qué no pones este punto (s) en un ArrayList o algo similar?

Así, por ejemplo, antes de hacerlo:

path.lineTo(point.x, point.y); 

que puede hacer:

yourList.add(point); 
path.lineTo(point.x, point.y); 

Y más adelante se pueden obtener todos los puntos de la ArrayList. Tenga en cuenta que puede aprovechar el Enhanced For Loop Syntax de ArrayList que se ejecuta hasta tres veces más rápido.

+0

que era lo que iba a hacer si no había otra alternativa. Dejaré la pregunta abierta por unos días más y si no se sugiere otra forma, aceptaré esto como la respuesta. – StartingGroovy

+0

@StartingGroovy Ok, consulte mi publicación actualizada, para aprovechar una aceleración del rendimiento, si finalmente elige esta solución. – Manos

+0

Interesante, no sabía que el bucle for mejorado era 3 veces más rápido :) ¡gracias por ese bocado! – StartingGroovy

24

Puede utilizar PathMeasure a obtener coordenadas de punto arbitrario en el ejemplo path.For este sencillo fragmento (que vi here) devuelve coordenadas del punto en el medio de la ruta:

PathMeasure pm = new PathMeasure(myPath, false); 
//coordinates will be here 
float aCoordinates[] = {0f, 0f}; 

//get point from the middle 
pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null); 

O esto fragmento devuelve una matriz de FlaotPoint array s.That implica coordenadas de 20 puntos en el camino:

private FlaotPoint[] getPoints() { 
     FlaotPoint[] pointArray = new FlaotPoint[20]; 
     PathMeasure pm = new PathMeasure(path0, false); 
     float length = pm.getLength(); 
     float distance = 0f; 
     float speed = length/20; 
     int counter = 0; 
     float[] aCoordinates = new float[2]; 

     while ((distance < length) && (counter < 20)) { 
      // get point from the path 
      pm.getPosTan(distance, aCoordinates, null); 
      pointArray[counter] = new FlaotPoint(aCoordinates[0], 
        aCoordinates[1]); 
      counter++; 
      distance = distance + speed; 
     } 

     return pointArray; 
    } 

en fragmento anterior, FlaotPoint es una clase que encapsula coordenadas de un punto:

class FlaotPoint { 
     float x, y; 

     public FlaotPoint(float x, float y) { 
      this.x = x; 
      this.y = y; 
     } 

     public float getX() { 
      return x; 
     } 

     public float getY() { 
      return y; 
     } 
    } 

Referencias:
stackoverflow
Animating an image using Path and PathMeasure – Android

Cuestiones relacionadas