2010-10-26 18 views
5

Estoy tratando de desarrollar una aplicación para Android (dirigida a las versiones 2.1/2.2) que requiere el seguimiento de los puntos de coordenadas de ruta xyy estoy teniendo un momento difícil. Los conceptos básicos de la aplicación son similares a FingerPaint, excepto que primero un hilo separado dibuja algunas líneas usando una ruta dibujable en un lienzo, luego el usuario intenta dibujar sobre esas líneas, cubriéndolas por completo con un objeto Paint y Path diferente. El usuario tendrá un Pincel de pintura más grande que la computadora. Las primeras líneas dibujadas automáticamente usan un hilo separado similar a la aplicación de ejemplo LunarLander. Como las líneas no son líneas rectas, me cuesta encontrar un método para hacer lo siguiente: 1. Siga el sorteo automático de puntos. Me doy cuenta de que estoy proporcionando los puntos básicos, pero usando path.lineTo y path.arcTo y path.quadTo para descubrir realmente todos los puntos.Seguimiento de Android coordenadas x, y dibujar desde la ruta

  1. Una vez que conozco todos los puntos, el trazado automático dibujó, supervisó y detectó cuando el usuario ha dibujado todos esos puntos y "gana" esa ronda.

Mi método ideal que obviamente no existe sería algo así como autoPath.getDrawnPoints().coveredBy(userPath.getDrawnPoints()) == true? Cualquier ayuda con esto sería muy apreciada, gracias. -Ben

+0

(Esto es bastante genérico, así que no me malgaste demasiado aquí.) Sin embargo, para almacenar todas las coordenadas en una matriz para la primera y segunda (Usuario) línea dibujada y , para el segundo (Usuario) uno preforma una comparación aproximada del primero con un margen de error. – Terrance

Respuesta

2

Todo lo que puedo decir es: Ruta se basa en GeneralPath de Java que se basa en Path2dFloat.

Si miro el código fuente tiene un paquete. Lectura transient float floatCoords[]; Así que la única forma en que veo para obtener las coordenadas que devuelve es más un truco que una solución. De todos modos, aquí está:

public float[] getPointsFromPath(GeneralPath path){ 
    Class<?> clazz = path.getClass(); 
    while(true){ 
     clazz = clazz .getSuperclass(); 
     if (clazz == Path2D.Float.class){ 
      break; 
     } 
    } 
    try { 
     Field f = clazz.getDeclaredField("floatCoords"); 
     if (f != null){ 
      if (!f.isAccessible()){ 
       f.setAccessible(true); 
      } 
      Object o = f.get(path); 
      if (o != null && o instanceof float[]){ 
       float[] drawnPoints = (float[])o; 
       Log.d("TAG", drawnPoints); 
       return drawnPoints; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Cuestiones relacionadas