Vectores

A continuación haremos un breve repaso sobre qué es un vector, que representa en el espacio y la utilidad que tienen en la programación de videojuegos.

Todos los ejemplos que muestro a continuación son sobre un plano en 2D (2 dimensiones) con pares de coordenadas (X,Y), pero es exactamente igual para posiciones en un espacio 3D (X,Y,Z).  Lo hago así debido a que la represantación gráfica de estos ejemplos en 2D es bastante más sencilla que en 3D.

Los vectores se utilizan sobretodo en física, para representar magnitudes como la velocidad, fuerza, etc. En videojuegos también tenemos infinitos ejemplos en los que se usan estas magnitudes, como puede ser la velocidad de un coche en un juego de carreras o la fuerza que recibe un objeto después de que el jugador choque contra él, etc.

En otro contexto, utilizamos la misma notación para definir puntos en el espacio, es decir, el par (5,3) también puede indicar el punto que se encuentra en la posición 5 en el eje X y la posición 3 en el eje Y, suponiendo que estemos trabajando con una representación de las coordenadas cartesianas, donde el eje X crece de izquierda a derecha y el eje Y crece de abajo hacia arriba.


Así en la imagen superior tenemos el punto en el espacio (5,3).

Ahora bien, imaginemos que estamos programando el movimiento de una nave espacial que se desplaza por la pantalla y queremos que vaya desde el origen, punto (0,0) al punto que tenemos marcado en rojo (5,3), ¿cómo lo hacemos?

Para movernos hasta el destino lo primero que necesitamos es una dirección por la que movernos, y es aquí donde entran en juego los vectores. Para ello necesitamos calcular el vector que tiene como origen nuestra posición actual y como destino el punto final al que queremos llegar. Para construir este vector simplemente restamos al punto final el punto de comienzo, es decir, en nuestro ejemplo sería algo tal que así:

El punto de comienzo es donde se encuentra la nave, dijimos que era el origen de coordenadas, así pues será el (0,0), esto es, Origen = (0,0)

El destino es el punto rojo, que se encontraba en la posición (5,3), de esta forma, Destino = (5,3).

Vector de dirección = Destino – Origen = (5,3) – (0,0) = (5,3).

Módulo de un vector

Cuando hablamos de módulo de un vector nos referimos a su longitud, si os fijáis el vector de dirección de la imagen anterior nos muestra la dirección que tenemos que seguir, pero también nos está indicando la longitud que nos separa de nuestro punto. Si sólo nos interesara la dirección, podríamos coger otro vector que pasara exactamente por encima de él pero de menor longitud, por ejemplo:

Como podéis ver, el vector azul tiene exactamente la misma dirección y sentido que el rojo, pero es más “pequeño”. Entonces, ¿podemos usar infinitos vectores para expresar el movimiento de nuestra nave espacial?

Matemáticamente sí, existen infinitos vectores que podríamos utilizar para desplazarnos entre esos dos puntos, la cuestión es que la longitud del vector también nos está indicando la velocidad y no sólo la dirección, es decir, si usamos el vector rojo en nuestro juego nuestra nave iría más rápido que si usáramos el vector azul.

Así pues, ¿cómo hacemos para definir una velocidad “estándar” para estos vectores?

La respuesta a esta pregunta es el término normalizar, al normalizar un vector estamos haciendo que su longitud sea igual a 1, estos vectores son llamados unitarios. Para convertir el vector anterior (5,3) en unitario debemos dividir cada coordenada entre la norma del vector.

La norma de un vector se calcula de la siguiente manera, es la raiz cuadrada de las sumas de las componentes al cuadrado, es decir:

Así, nuestro vector de dirección unitario será (5/5,83 , 3/5,83) = (0.857, 0.514)

De manera que si suponemos que tenemos un método que actualiza la posción de la nave cada frame y que las casillas de las imágenes son metros, para desplazarnos, por ejemplo, a 10 metros por segundo en nuestra nave tendríamos que utilizar la fórmula:

10 x (0.857, 0.514) x tiempo

Y con este ejemplo acaba este pequeño repaso sobre vectores en 2D. Si tenéis dudas dejad vuestros comentarios!

También podéis echar un vistazo a la wikipedia para ver con más detalles estos conceptos:

http://es.wikipedia.org/wiki/Vector

http://es.wikipedia.org/wiki/M%C3%B3dulo_(vector)

2 pensamientos en “Vectores

  1. Pingback: Nuevo ejemplo en la seria de repaso matemático | Aprendiendo XNA

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s