jueves, 8 de mayo de 2014

7.- Fuerzas, impulsos y velocidad lineal.

Como sabemos en Box2d existen fuerzas que cuando las aplicamos a los cuerpos crean una simulación real, esto nos permite mover los cuerpos, lanzar pájaros con una resortera, disparar, saltar, etc. 

Para aprender sobre las diferentes fuerzas vamos a crear 3 pelotas como se ve en la siguiente imagen.






Necesitamos un arreglo en donde almacenar los cuerpos de nuestras 3 pelotas al que llamare arrPelotas.

Como pueden ver se crea el arreglo arrPelotas en el constructor así como el vector velocidad, este ultimo es la fuerza "velocidad" que aplicaremos a nuestras 3 pelotas. Así que suponemos que las 3 pelotas se moverán de la misma forma, a la misma velocidad, pero no es así.

Tambien tenemos 4 funciones que son crearPiso(), crearPelotaIzquierda(), crearPelotaCentro() y crearPelotaDerecha(). Como su nombre lo indica la primera crea el piso y las otras crean las pelotas, en este tutorial omitiré la explicación de crear el piso ya que en tutoriales anteriores se ha explicado.

La creación de las pelotas es muy sencilla y si han seguido los tutoriales anteriores no tendrán ningún problema. Primero creamos un BodyDef donde asignamos la posición y el tipo de cuerpo que en este caso es dinamico. Después creamos una figura circular con CircleShape con un radio de .25 metros.
A continuación una fixtura con una densidad de 15 kgm/s^2 (kilogramo * metro / segundo ^2), fricción de .5 y elasticidad de .5.

Noten que guardamos el cuerpo en el arreglo de la siguiente manera arrPelotas[0] = oBody;

Para las 2 pelotas restantes es lo mismo lo unico que se modifica es la posición en X.


Por ultimo no hay que olvidar llamar la función step de nuestro mundo oWorld.step(delta, 8, 6); y tambien dibujar en pantalla los cuerpos del mundo renderer.render(oWorld, oCamBox2D.combined):.

Como pueden ver en la función draw()  tambien dibujamos los Frames por segundo de nuestra aplicación.

Aplicando las fuerzas

Se preguntaran que pasara si corremos la aplicación en este momento. La respuesta es nada ya que no hemos aplicado las fuerzas a las pelotas. Esto lo haremos dentro del constructor después de haberlas creado de la siguiente manera:
Recuerdan que habíamos guardado los cuerpos en el arreglo, esto para poder aplicar las fuerzas.
Si corremos la aplicación vemos que las pelotas no se mueven de la misma forma:


  • La primera a simple vista no hace nada
  • La segunda se mueve solo un poco
  • La tercera se mueve muy arriba


Se preguntaran que es lo que esta pasando. Vamos a analizar cada una de las funciones:

applyForceToCenter: Aplica una fuerza al centro comúnmente en Newtons en este caso hacia arriba, un ejemplo real seria bajarte de tu automóvil y empujarlo por un instante con una fuerza de 50 Newtons. ¿Que distancia recorrería? Normalmente no lo empujarías ni 3 metros. Aplicar una fuerza depende del tiempo y en el caso de nuestra pelota solo lo hacemos un instante por lo que la pelota nisiquiera se levanta.

applyLinearImpulse: Aplica una fuerza comúnmente en Newtons-segundos esto modifica instantáneamente la velocidad del cuerpo en el caso de nuestra pelota hacia arriba, como ejemplo real si empujamos nuestro automóvil con un fuerza de 50 Newtons-segundo ¿Que distancia recorrería?. Pero que pasa si empujamos una caja de carton con la misma fuerza ¿Que distancia recorrería nuestra caja?, La caja de carton alcanzaría una distancia muy grande ya que su masa es muy pequeña. Como podemos ver aplicar un impulso depende de la masa de nuestro cuerpo. 

Como ejercicio modifica la densidad de la pelota del centro, actualmente la densidad es de 15,  ¿Que pasa cuando pones una densidad menor?

setLinearVelocity: Por ultimo esta función cambia la velocidad del objeto sin depender del tiempo ni de la masa del cuerpo. En pocas palabras no importa si modificamos la densidad, la pelota siempre va alcanzar la misma altura.

Nota:

A nuestras pelotas las fuerzas siempre fueron aplicadas a su centro, en caso de que aplicáramos la fuerza en un lugar diferente existiria una rotación de los cuerpos.

---

Con esto finalizamos el tutorial 7. Recuerden que pueden descargar el código fuente

No hay comentarios.:

Publicar un comentario