2010-02-05 23 views
5

Para un juego 2D en el que estoy trabajando, me gustaría descubrir cuándo un proyectil alcanza su punto más cercano para apuntar a su objetivo.Punto más cercano en un camino a un punto, o: Estimado objetivo, lo siento, lo extrañé

Un proyectil es un punto que se mueve en una constante dx, dy por cuadro. Un objetivo es otro punto cuya velocidad relativa al proyectil es lo suficientemente lenta como para considerarse estacionaria. Quiero hacer explotar el proyectil cuando está (aproximadamente) tan cerca del objetivo como será.

¿Cuál es una buena manera de calcular esto?

La precisión absoluta no es crítica, esta es la simulación del lado del cliente de un evento que ya se ha resuelto en el servidor. Preferiría un algoritmo que fuera rápido y simple a uno que fuera perfecto en píxeles.

+0

El duplicado propuesto (http://stackoverflow.com/questions/913576/finding-the-closest-point-to-a-given-point) no lo es.Tampoco hay preguntas que soliciten el punto de armario en una línea, porque esta versión permite una aproximación por pasos, que sería incorrecta cuando se aplica a "¿Cómo encuentro el punto más cercano en una línea?". – dmckee

Respuesta

2

Mantenga un registro de la distancia anterior y verifique en el primer momento que la distancia comienza a aumentar.

if ((currentDistance==0) || (currentDistance > previousDistance)) Explode() 

Es sólo que esta sencilla porque la geometría del trayecto es trivial (es decir, una línea recta), pero funciona muy bien.

Esto tiene la ventaja adicional de funcionar cuando el objetivo es más rápido de lo que usted describe, siempre y cuando ambas pistas sean rectas (o al menos ligeramente curvadas).

Limitación, el tamaño del paso debe ser pequeño en comparación con el "tamaño" de la explosión, o esto no funcionará correctamente. En ese caso, necesitaría precomputar la siguiente distancia ...

2

Calcular la normal a la ruta que se cruza con el objetivo. La intersección de la ruta normal y la ruta será el punto más cercano en el camino hacia el objetivo.

1

Parece que su 'proyectil' se mueve básicamente en línea recta.

Lo simple que se debe visualizar es transformar su plano 2D para que la línea se convierta en el eje x. Esto implicaría una rotación por arctan (dy/dx).

Aplica la misma transformación al punto en cuestión, y obtén la coordenada y.

Si lo desea, puede hacerlo manualmente y descubrirlo, pero las API de juegos ya deberían ser adecuadas para esto.

0

Podrías usar el teorema de Pitágoras que solo usa la fórmula (a) 2 + (b) 2 = (c) 2. Entonces, su distancia sería igual a la RAIZ CUADRADA del producto. Aquí hay un buen artículo sobre cómo implementarlo usando puntos en una grilla.

http://www.mathwarehouse.com/algebra/distance_formula/

Cuestiones relacionadas