Calcular recorrido disparo en vista aérea

En un juego tipo shoot´em up, escrito en lenguaje C ¿Como calculo la trayectoria de un proyectil haciendo diagonales?

Tenemos la nave y tenemos al enemigo. El enemigo dispara y el proyectil se dirige hacia la posición donde estaba la nave.

¿Cual es el logaritmo para hacer eso?
Supongamos que el proyectil del enemigo está en la posición a, mientras que nuestra nave está en la posición b. Podemos interpretar los puntos a y b como vectores desde el origen y calcular el vector desde a hacia b con la resta de vectores b-a

Imagen,

Por ejemplo, digamos que el proyectil enemigo está en (1,2) y nuestra nave está en (4,3).
Para obtener el vector por el que viaja el proyectil, restamos la posición de la nave con la del proyectil:

(4,3)-(1,2) = (4-1, 3-2) = (3,1)

PD: ¡Suerte con el matamarcianos! =)
Trabis escribió:
Supongamos que el proyectil del enemigo está en la posición a, mientras que nuestra nave está en la posición b. Podemos interpretar los puntos a y b como vectores desde el origen y calcular el vector desde a hacia b con la resta de vectores b-a

Imagen,

Por ejemplo, digamos que el proyectil enemigo está en (1,2) y nuestra nave está en (4,3).
Para obtener el vector por el que viaja el proyectil, restamos la posición de la nave con la del proyectil:

(4,3)-(1,2) = (4-1, 3-2) = (3,1)

PD: ¡Suerte con el matamarcianos! =)


Con eso obtienes el vector de dirección, para calcular la trayectoria (digamos el recorrido del proyectil) realiza lo siguientes pasos:

Luego de obtener ese vector (como dice el compañero Trabis):
1 - lo normalizas (si no tienes una librería que implemente matemáticas de vectores, los haces con lo siguiente (siguiendo el ejemplo de Trabis):
- primero obtienes el tamaño del vector(3,1) = raiz_cuadrada(3 * 3 + 1 * 1)
-normalizado(X,Y) = (3/tamaño, 1/tamaño)

Ahora para el recorrido del proyectil, suponiendo que posición es un Vector de 2 dimensiones, vas sumando a la posición el resultado de multiplicar el vector normalizado por la velocidad a la que debe moverse:
posicion = posicion + normalizado * velocidad

Ya solo faltaría la lógica de donde termina el recorrido.

Ojalá he dicho esto de manera clara, si no, no dudes en preguntar.

Saludos.
2 respuestas