Operaciones Basicas Con Vectores

download Operaciones Basicas Con Vectores

of 4

Transcript of Operaciones Basicas Con Vectores

  • Operaciones bsicas con puntos y vectoresMatemticas para desarrollo de videojuegos

    Curso de Programacin Unity 3D

    Operaciones bsicas con puntos y vectores

    Los vectores y puntos matemticos son muy necesarios en un videojuego para operaciones tanbsicas como el movimiento de un personaje. A lo largo del cdigo de un juego, los vectores se utilizancontinuamente.

    1, Vector en fsicas vs Vector en juegos

    Antes de comenzar a realizar operaciones con vectores, se debe entender que en el contextoinformtico no se trabaja con ellos de la misma forma que se hara en el contexto cientfico.

    En fsicas, un vector se representa por su ngulo y magnitud. Pero en informtica, un vector se representapor coordenadas x e y (para vectores bidimensionales) o por coordenadas x y z (para vectorestridimensionales).

    2, Movimiento mediante vectores

    Mediante un vector podemos mover elementos de nuestro juego (personajes, vehculos, objetos...)hacia una nueva posicin. Para ello slo necesitamos la posicin actual del elemento que queremos mover, yel vector con el que vamos a moverlo.

    En Unity esto es muy sencillo ya que ambos datos (tanto la posicin actual del objeto como el vector)se expresan mediante el mismo tipo: Vector3. Para colocar el objeto en una nueva posicin, se suman lascoordenadas x y z de la posicin del objeto a las coordenadas x y z del vector que indica la direccin. Al serel mismo tipo de dato en Unity lo podemos hacer directamente.

    Vector3 posicion = new Vector3 ( );Vector3 direccion = new Vector3 ( 1f, 0f, 0f );Posicion = transform.position; //Posicion ActualPosicion = Posicion + Direccion; //Nueva posiciontransform.position = Posicion;

    Operaciones bsicas con puntos y vectores Matemticas para desarrollo de videojuegos Pg. 1

  • Operaciones bsicas con puntos y vectoresMatemticas para desarrollo de videojuegos

    Curso de Programacin Unity 3D

    3, Vector entre posiciones

    Cmo podemos hallar el vector que se encuentra entre 2 puntos A y B? Cmo podemos saber aqu distancia estamos de un enemigo, o de nuestro objetivo actual en el juego? Muy sencillo.

    Para obtener el vector que se encuentra entre los puntos A y B slo tendramos que restar suscoordenadas, es decir, Ax Bx, Ay By, Az Bz. En Unity, podemos restar directamente ambos puntos, yaque sern de tipo Vector3.

    public GameObject objetivo; //Objeto Bpublic Vector3 posicion = new Vector3 ( );public Vector3 posicionObjetivo = new Vector3 ( );public Vector3 vector = new Vector3( ); //Vector entre posiciones

    posicion = transform.position; //Posicion del objeto AposicionObjetivo = objetivo.transform.position; //Posicion del objeto Bvector = posicionObjetivo posicion;

    El vector resultante indica la direccin que habra de seguir el objeto A para llegar a la posicin delobjeto B.

    Operaciones bsicas con puntos y vectores Matemticas para desarrollo de videojuegos Pg. 2

  • Operaciones bsicas con puntos y vectoresMatemticas para desarrollo de videojuegos

    Curso de Programacin Unity 3D

    4, Longitud de un vector. Comparacin de longitudes

    Una vez obtenido el vector entre dos posiciones, Cmo sabemos la distancia a la que est un puntodel otro? Para ello se recurre a una frmula basada en el Teorema de Pitgoras. Si por ejemplo tenemos unvector bidimensional, podemos representarlo como un tringulo en el que la longitud equivale a lahipotenusa, y las coordenadas x e y a los catetos.

    As, hallar la longitud del vector es lo mismo que hallar la hipotenusa del tringulo. DISTANCIA2 = X2 + Y2

    Y mediante la raz cuadrada, hayamos la distancia exacta que representa se vector. Si tratamoscon un vector tridimensional, simplemente hemos de aadir la coordenada Z a la frmula:

    DISTANCIA2 = X2 + Y2 + Z2

    En Unity es incluso ms sencillo obtener sta distancia. Las clases de vectores de Unity incluyen lafuncin magnitude, que devuelve automticamente la distancia que representa el vector. Tambin se incluyela funcin sqrMagnitude, que devuelve la distancia al cuadrado, sin resolver la raz.

    Para qu nos sirven stas funciones? Muy fcil. Cuando necesitemos la distancia exacta, usaremosla funcin magnitude. Cuando simplemente queramos comparar varias distancias para obtener, por ejemplo,la mayor, usaremos la funcin sqrMagnitude, ya que es ms rpida de procesar para la mquina.

    Operaciones bsicas con puntos y vectores Matemticas para desarrollo de videojuegos Pg. 3

  • Operaciones bsicas con puntos y vectoresMatemticas para desarrollo de videojuegos

    Curso de Programacin Unity 3D

    5, Vectores unitarios (normalized)

    A veces nos interesa utilizar vectores como referencia para tratar la direccin en la que mira unpersonaje, o la orientacin de un determinado objeto. Pero en esos casos no nos interesa tener en cuenta lalongitud del vector.

    Un vector unitario es un vector cuya magnitud siempre es 1. Es decir, slo almacenamos en l unadireccin, pero nunca tendremos en cuenta la distancia que abarca.

    Para obtener el vector unitario de cualquier vector tenemos que dividir todas sus coordenadas porsu magnitud (su longitud). Unity nos proporciona sin embargo un mtodo directo para convertirlo: lasfunciones normalize y normalized. Vector.normalize() transforma el vector en un vector unitario, mientrasque Vector.normalized() devuelve el vector unitario sin alterar el vector origen.

    6, Sumar / Restar / Multiplicar / Escalar vectores

    Podemos operar directamente con los vectores con los que estemos trabajando para alterarlos.Adems de poder sumar o restar vectores de la misma forma que haramos con los puntos, podemosescalarlos. sto significa que podemos alterar la magnitud de un vector sin variar su direccin, por ejemplo,para aumentar o disminuir la velocidad a la que se mueve un objeto.

    Tambin podemos multiplicar vectores entre s. Para multiplicar dos vectores cualesquiera,multiplicamos sus coordenadas correspondientes (X * X, Y * Y, Z * Z). En Unity, mediante la funcinVector.Scale podemos obtener directamente un vector equivalente a la multiplicacin de dos vectores.

    Vector3 vResultado = Vector3.Scale ( vectorA, vectorB );

    Para escalar un vector multiplicamos o dividimos todas sus coordenadas por el mismo nmero. Porejemplo, para obtener un vector cuya magnitud es el doble de su magnitud actual, multiplicaramos suscoordenadas x y z por 2. En Unity podemos multiplicar directamente un dato numrico por un tipo de vectorpara escalar su tamao.

    Operaciones bsicas con puntos y vectores Matemticas para desarrollo de videojuegos Pg. 4