Artículos anteriores:
Parte 1: Integración de Verlet
Parte 2: Constraints
Bien, ahora vamos a adentrarnos en el tema de los choques bidimensionales entre discos.
Por obvios motivos, centré el tema en la programación en AS, pero sin olvidar la base física. Por lo tanto, este tutorial puede servir para entender los conceptos fundamentales del tema (si alguien está interesado desde el punto de vista de la física y no del código, asumo que estarán familiarizados con el choque unidimensional, en ese caso, lo que sigue será sólo una extensión de ese tema).
Sorprendentemente, no pude encontrar en ningún lado un tutorial que cubriera todos los temas que trato aquí (lo que habla bastante mal de mis capacidades de búsqueda) y me deja con ganas de saber si la carencia se debe a que todos suponen que este tema es obvio y que no necesita mayor explicación o porque para eso existen los profesores de física....
Entrando en tema... Porqué elegir discos y no cuerpos arbitrarios? Simplemente porque cuando uno intenta aplicar física a los juegos de Flash, descubre que lo más simple es usar círculos.
Porqué es más simple? Bien, se debe a que para detectar colisiones, solo hace falta calcular la distancia al objeto con el que queremos verificar la colisión, sabiendo que ésta no debería ser menor al radio del objeto en cuestión. Además, la distancia de penetración se calcula con muchísima facilidad (un tema ajeno a este tutorial).
A modo de ejemplo veamos las siguientes imágenes:
En éste caso, se puede ver como la colisión se puede calcular de la siguiente manera:
Código :
var colision = d < r; // Output: falseEs lógico que esto simplifica enormemente las cosas.
En éste otro ejemplo, las cosas son distintas, pero no tanto. Para saber si 2 círculos colisionan simplemente calculamos la distancia entre sus centros. El código sería el siguiente:
Código :
var colision = d < r1 + r2; // Output: false
Usando sólo estos datos podemos construir el siguiente ejemplo (mover el mouse para ver la colisión):
Podemos ver cómo el usar hitTest no es muy preciso (los círculos son tomados como cuadrados cuyo lado es igual al diámetro del círculo) mientras que el método de calcular las distancias es muy exacto. Además, aclaro que ambos métodos consumen más o menos la misma cantidad de recursos, y si pueden aproximar las raíces cuadradas, (o, aún mejor, usar distancias cuadradas y olvidarse de las raíces) la velocidad del segundo -y más preciso- método aumenta considerablemente.
Pero detectar la colisión es el aspecto fácil del tema. Lo más difícil es conseguir un rebote realista.
Por lo que de ahora en adelante, nos vamos a enfocar en el choque perfectamente elástico, donde los objetos que colisionan no se comprimen y no se pierde energía (casi el caso de las bolas de billar), con el fin de simplificar las cuentas. De todos modos, voy a intentar hacer un par de paréntesis para explicar choque inelástico y más adelante el choque plástico o perfectamente inelástico.
En realidad, lograrlo no es tan complejo como parece. Pero vamos a empezar con el caso más simple, una bola estática (en física se suele decir que tiene masa infinita o m1>>m2) y otra que se mueve libremente. Este caso es bastante simple, luego de la colisión, la segunda pelota va a moverse a igual velocidad (porque es elástico) pero en ángulo distinto. Lo importante es calcular ese ángulo.
Para eso veamos el primer ejemplo:
Supongo que el gráfico ilustra muy bien cómo se supone que rebota un objeto contra una superficie.
Aunque este tutorial habla del choque elástico, vale la pena hacer un paréntesis para discutir el choque inelástico. En este caso, la pelota y/o la pared se comprimen, por lo que pierde energía y luego del choque, la pelota se mueve con velocidad menor. Para trabajar con éstos choques, es necesario incluir el concepto del coeficiente de restitución (e).
Básicamente, este coeficiente indica cuánto varía el ángulo y la velocidad final en éste tipo de choques (en realidad, e determina cuánta energía se conserva luego del choque, lo que dije antes es la aplicación práctica de éste hecho. A saber, en los choques elásticos, e=1). La relación de los ángulos es la siguiente:
Código :
var angFinal = Math.atan (e * Math.tan (angInicial));La velocidad final se calcula de dos maneras posibles:
Código :
var velFinal = (e * velInicial * Math.cos (AngInicial)) / Math.cos (angFinal);
Código :
var velFinal = (velInicial * Math.sin (AngInicial)) / Math.cos (angFinal);De cualquier forma, esto es complicado y no es necesario, ya que podríamos simplemente multiplicar la velocidad por una constante arbitraria menor a 1 para conseguir un efecto similar y suficientemente realista para e similar a 1.
Ahora, volviendo con el choque elástico, tomamos esa idea básica, con la misma relación de alpha y beta, pero ahora la "superficie" será la línea tangente al círculo en el punto en que chocan las pelotas:
Entonces, todo se reduce a calcular ese ángulo y a efectuar unas operaciones aritméticas básicas. Nuestro primer ejemplo quedaría así (éste ejemplo es simple y creo que podrían hacerlo ustedes mismos):
SHIFT para mover la bola grande
En ese ejemplo, el rebote se calcula con una fórmula muy simple que es (pseudocódigo):
Código :
var angFinal = 2 * tangente - angInicial;La tangente la calculamos sumandole π/2 al ángulo que forman las bolas.
Pero eso es sólo el 50% de lo que queremos hacer. Lo más complicado es hacerlo con 2 bolas. En este caso, vamos a presuponer que las masas son iguales. De todos modos, las cuentas para distintas masas no son demasiado complejas, aunque se complican lo suficiente como para intentar con masas iguales siempre que sea posible; además, en la mayoría de los casos (pool, billar), las masas deben mantener esa relación.
En primer lugar, vamos a observar el caso más simple, una bola en reposo y otra que se dirige hacia ella:
Así, gráficamente, es muy fácil ver la relación entre la velocidad final de los 2 cuerpos y la velocidad inicial del cuerpo en movimiento. Además observamos que el ángulo que forman las direcciónes de las velocidades finales es igual a 90º (sólo si ambas masas son iguales).
Las cuentas quedan así:
Código :
var velFinal1 = velInicial * Math.sin (angIni - angulo); var velFinal2 = velInicial * Math.cos (angIni - angulo);Básicamente, el código anterior asigna las velocidades dependiendo de el ángulo que forman el movimiento de la primer pelota (angIni) y el ángulo entre ambas pelotas (angulo).
Entonces, ya estamos en condiciones de armar un segundo ejemplo (como antes, insisto en que intenten hacerlo ustedes mismos):
SHIFT y CONTROL para mover las bolas
Como ya dije, las cuentas para distintas masas se complican y lo mismo para el caso del choque inelástico (que ya mencioné más arriba). De todas formas, [url]en ésta página[/url] pueden encontrar las fórmulas que se pueden adaptar muy fácilmente.
NOTA: A los que deseen visitar el link anterior, tengan en cuenta la orientación de los ejes. La página anterior es de física y no de física en Flash
Uf, ahora viene lo más interesante, el choque cuando ambos discos se hallan en movimiento. En este caso, las cosas se complican un poco y difieren bastante del caso anterior. Entonces, cabría preguntarse porqué me molesté en explicarlo. A decir verdad, el hecho de que sea más simple es una ventaja ya que muestra los conceptos básicos sin dejar de ser realista.
Ahora bien, como dije este caso es más complejo y sería ridículo intentar explicarlo sin una imagen (en realidad necesito 2).
En ésta imagen vemos el primer paso, descomponer el vector velocidad en otros 2 vectores, uno paralelo al ángulo entre las pelotas y otro perpendicular a éste (hacemos esto con ambas velocidades)
Ahora, intercambiamos los componentes de la velocidad paralelos al ángulo de choque.
Debería resultar obvio a estas alturas que este ejemplo es idéntico al que habíamos hecho antes, tomando en cuenta que la velocidad de una de las bolas es 0.
Antes de ir a la parte práctica, quiero explicar porqué se intercambian los componentes de la velocidad paralelos al ángulo de las pelotas.
Básicamente se debe a que sobre esa línea imaginaria las pelotas se transmiten su momento. Entonces, sobre esa línea se aplican las reglas del choque elástico en una dimensión (que indican justamente que se intercambia la velocidad cuando las masas son idénticas).
Entonces, a partir del ejemplo anterior, construimos otro, que ya nos permite un rango de posibilidades mucho más amplio.
Bajar los archivos del tutorial
Cabe aclarar que todos los ejemplos están pensados en pos de la legibilidad y simpleza, ninguno tiene más de 80 líneas de código (incluyendo comentarios).
Y bien, ya llegamos al final. A continuación, dejo 3 apéndices donde voy a tratar un par de temas que (para mantener la unidad del tutorial) no pude incluir antes.
APENDICE 1: CENTRO DE MASA
Una de las formas de resolver estos problemas es hacerlo por medio del centro de masa. Incluso, puede que hasta resulte más cómo trabajar así cuando las bolas tienen distinta masa.
Supongo que ya sabrán que es el centro de masa (Cm de ahora en adelante). Es el punto en donde debemos sostener un objeto para que no se caiga. Lo que quizá no sabían es que se puede trabajar con el Cm incluso para 2 o más cuerpos separados.
Veamos el siguiente diagrama:
En este caso se observa que el objeto de la derecha es más grande (simbolizando que tiene más masa) y por lo tanto, el Cm de ambos cuerpos está más cerca de éste.
Ahora bien, la importancia del Cm puede no ser clara. Pero no importa cómo se muevan esos cuerpos (suponiendo que estuviesen perfectamente aislados) el centro de masa se va a mover con movimiento rectilíneo uniforme (es decir, sin aceleracion y sin cambiar de ángulo). Puede resultar difícil de creer, pero incluso aunque la gravedad los tirara hacia abajo, el Cm se movería de forma uniforme (aunque con aceleración vertical) como un objeto puntual en un caso de tiro oblicuo.
Si empleamos esto, podemos ver lo simples que pueden llegar a ser las fórmulas con bolas de masas distintas.
Es más, supongamos ahora una caja (seguimos en 2D), y pensemos en su Cm como un puntito en su centro.
Ahora, arrojamos la caja desde una altura y ésta cae, rebota, y gira en el aire. Aunque parezca mentira, su centro de masa se mueve como una pelota arrojada contra el piso que rebota.
Es decir, el centro de masa de un objeto se comporta como un punto sometido a las mismas fuerzas que el objeto extenso.
APENDICE 2: CHOQUE PLÁSTICO
Bien, el choque plástico es un caso particular de choque inelástico, donde e=0 (recordemos que en el choque elástico, e=1). Es decir que se pierde la mayor cantidad de energía posible (no necesariamente toda, aunque en algunos casos esto ocurre) en el choque. En éste caso, ambos objetos quedan pegados el uno con el otro.
En este caso las cuentas son muy simples (hasta demasiado), pero, es conveniente trabajar con las componentes horizontal y vertical de la velocidad (es decir, velocidad en el eje x y en el eje y) y no con la velociad y un ángulo (usar el esquema de Verlet simplifica las cosas).
Supongamos 2 objetos (de igual masa) que se mueven y quedan pegados. La velocidad en x del conjunto va a ser igual a la suma de las velocidades en ese mismo eje de los objetos por separado; lo mismo se aplica para el eje y.
En caso de que trabajemos con masas distintas podemos usar el Cm (que funciona perfectamente) o el teorema de la conservación de la cantidad de movimiento, que dice que la suma de las masas por las velociades de cada objeto se mantiene (si tenemos 2 objetos que quedan pegados, la suma de sus masas individuales por sus velocidades debe ser igual a la masa de ambos por la velociad final). En otras palabras:
Código :
var velFinal = (m1 * v1 + m2 * v2) / (m1 + m2)
APENDICE 3: USANDO VERLET
A primera vista, todo lo que hicimos (excepto el choque plástico) puede parecer incompatible con el esquema de Verlet de la primera parte. Pero en realidad no lo es en absoluto. En caso de que queramos usar Verlet simplemente calculamos la velocidad y el ángulo de movimiento en el momento de la colisión, para realizar los cálculos que vimos más arriba. Por supuesto, luego movemos un paso los objetos y dejamos que Verlet haga el resto.
Para calcular la velocidad y el ángulo de movimiento podemos usar los métodos de la clase Trig que incluí entre los ejemplos anteriores:
Código :
var velocidad = Trig.distancia ({_x:0 , _y:0}, {_x:velx, _y:vely}); var angulo = Trig.angulo ({_x:0 , _y:0}, {_x:velx, _y:vely});
Ahora sí, llegamos al verdadero final de la tercera parte
fuente
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por HernanRivas el 21 de Agosto de 2007
http://www.geocities.com/~dr_ericlin/flash/indexgeo.html
Por Lightwave el 21 de Agosto de 2007
Estos principios son los que utilicé yo para hacer un arkanoid
Sigue asi con los tips de física aplicada, a mi por lo menos me interesan bastante.
Saludos.
Por JaLeRu el 21 de Agosto de 2007
Se te agradece Eternamente!!!!!!!! Muchisimas Gracias!!! En serio>!
Por Benutti el 22 de Agosto de 2007
felicitaciones!
Por ferranpujol_de vacac el 22 de Agosto de 2007
Por HernanRivas (lo el 22 de Agosto de 2007
Por Freddie el 22 de Agosto de 2007
Por HernanRivas (lo el 22 de Agosto de 2007
Por cierto, sobre la usabilidad del Ctrl y el Shift, gracias por el consejo, voy a tenerlo en cuenta para la próxima.
Por ferranpujol el 24 de Agosto de 2007
No, no me referia al ejemplo de las dos bolas y del shift y el control.
Hernán, antes de todo, dejar constancia de que esto no es una guerra porque no me parezcas simpatico ni nada parecido.
Si esto fuera un juicio te diria que acabas de caer en tu propia trampa: tu mismo dijiste que no era necesario complicarse haciendo las cosas físicamente perfectas. En este caso no se si te has complicado más o menos, has dicho que las equaciones eran Newtonianamente correctas (yo me fio) pero el último swf no es efectista. *Los otros si, muy buen trabajo .
Con esto sólo quiero que veas que si un señor hace una web de física con una explicació al alcance de pocos o no muchos, no es posible simplificarlo sin afectar al resultado.
Y que quede claro que no intento destruir a nadie, ni menospreciar a nadie ni al trabajo de nadie.
Por RASUA24 el 17 de Mayo de 2009
Por CLAnonimo el 24 de Noviembre de 2010
Por anonimo el 03 de Marzo de 2011
Por Alex2013 el 28 de Julio de 2013
Anonymou s :
Por lee123 el 23 de Junio de 2018
<P></P>
<P>15th nike free run seed jordan 12 products, air max Beating jordans for women four nike outlet season nike air max counselling nike cleats champ and nike air max 95 as well, womens nike air max seven mens nike air max victor nike air max 90 Wimbledon Adidas Yeezy Boost Pete air max 1 Sampras nike outlet 7 6(7), 5 moncler outlet online shop 7, Adidas Yeezy 350 Boost 6 4, air max 6 jordan 11 7(2), jordan 6 7 jordans for cheap 5 inside cheap nike air max of nike factory store the nike free run fourth nike roshe run circular christian louboutin outlet in nike shoes for women a tome five nike factory store set cheap beats in beats headphones cheap place accommodate. moncler sale womens This nike air max 90 key moncler discount fact mens nike air max control nike air max 95 completed mont blanc pen cost Sampras nike roshe run 31 beats headphones meet Yeezy Boost collecting skills nike free 5.0 contained mont blanc pen refills rrnside womens moncler coat the competition. He nike shoes too air max 1 was able under armour discount to air max 1 achieve nike air max the quarter air max 95 finals nike store at jordans for sale in france nike boots they air max 90 large. nike roshe </P>
<P></P>
<P>It nike outlet a beats by dr dre soar three nike air max 2017 opportunity Yeezy Boost 350 For Sale scene moncler outlet online safe bet nike air max as huge nike air max 90 Olympic Yeezy Boost 350 good nike shoes Simone moncler coat sale Biles montblanc online elected nike air max 90 to nike roshe produce montblanc outlet store yr [url=http://www.jerseysonlinesalecheap.com/ ]custom jerseys[/url] after nike cleats in [url=http://www.jerseysonlinesalecheap.com/ ]baseball jerseys[/url] the event nike shoes for women that she cheap under armour or jordan 11 he moncler jacket womens sale got adidas outlet out [url=http://www.jerseysonlinesalecheap.com/ ]cheap jerseys[/url] of cheap under armour a deal nike store at UCLA to clue with nike roshe a representative. nike store Biles was jordan shoes dedicated working nike store with nike factory store the Bruins moncler vest womens it has mont blanc online shop even moncler jacket mens a back Michael Kors Sale plate nike store during beats by dre wireless a nike shoes workout moncler online session moncler jacket womens her moncler jackets wife moncler outlet uk and nike shoes for women kids work Adidas Yeezy with whom air max displayed Biles retro jordans choosing under armour outlet a light buy mont blanc pen yellow beats by dre on sale UCLA nike boots written [url=http://www.jerseysonlinesalecheap.com/ ]discount jerseys for sale[/url] polo mont blanc pens for sale ahead nike huarache of nike shoes for men the mathematics got nike air max 2017 to nike roshe run be coldly cheap moncler one moncler outlet on mens nike air max the nike free run sides. nike store The expert nike outlet pleaded the under armour shoes girl christian louboutin sale position in nike roshe run direction of nike boots Biles jordans for cheap wife and louboutin outlet kids, jordan 5 Truthfully realized this beats by dre can reminiscent retro jordans of moncler sale a better nike shoes for women basketball beats by dr dre game moncler sweatshirt teacher mont blanc sale inquiring about air jordan lebron to mont blanc fountain pen sale do that nike roshe run began to nike shoes allow beats solo 2003, nike clearance </P>
<P></P>
<P>Assisting GHSA nike cleats your louboutin shoes barrier 5A jordan shoes winner nike shoes for men Kell(Ga.) nike shoes for men Tactics in nike shoes following moncler jacket mens sale 13 12 enlighten preceding to moncler sale outlet the beats by dre sale southerly nike cleats none beats headphones cheap of. moncler 5 Hutchison(Tenn.). nike sneakers The air max 1 type moncler jacket women's of cheap jordans Longhorns nike free 5.0 tried nike sneakers that can way mont blanc fountain pen price in moncler padded jacket place past womens nike air max giving Houston(Tenn.) womens nike air max It nike shoes is really most cheap beats by dr dre significant losing the mont blanc rollerball pen growing mont blanc season, moncler coats And retro jordans afterward Houston suffered with fall Michael Kors Purses On Sale within Michael Kors Diaper Bag Sale a Yeezy Boost 350 Price few four hopes nike air max 90 at jordan 11 Hutchison, mont blanc gold pen Guy southern cheap jordan shoes scored black moncler coat almost mont blanc pencil holy soul(Ky.) Rrncluding Michael Kors Bags On Sale a 2014 talk nike free about jordan shoes jogger nike air max out into beats earbuds Kentucky usa mont blanc online store Day. </P>
<P></P>
<P>If Leaf reconciled cheap beats after to nike air max the rest of nike clearance the cheap beats by dre world mississippi A air max the nike air max mans craving established mont blanc rose gold pen itself jordan shoes as nike free neighborhood skill-sets under armour womens shoes anf nike shoes for women the womens nike air max husband jordans for girls had mont blanc prices no Adidas Yeezy For Sale alternate Michael Kors Diaper Bag even nike roshe though to beats by dre studio take nike roshe care moncler shorts of nike basketball shoes devils. nike free 5.0 Leaf mont blanc fountain pen started out moncler t shirt the Michael Kors On Sale consumption of pain beats headphones on sale relievers issue next [url=http://www.jerseysonlinesalecheap.com/ ]nba jerseys[/url] going under the knife jordans for sale enrolled and nike factory store the advantages. It air max 1 obtained harmful jordans for women drugs cheap nike air max weekly nike free 5.0 on jordan 13 the beats headphones other nike roshe run hand, nike shoes He explained, nike shoes for men Undoubtedly over air max used nike boots customers nike basketball shoes prior under armour sale to result montblanc factory outlet involved moncler mens with moncler sale uk 2008. jordan 6 </P>
<P></P>
<P>Is black moncler jacket on cheap jordan shoes the nike sneakers list of nike roshe north moncler hoodie western nike free Connecticut communities that christian louboutin shoes have Michael Kors Handbags On Sale Nike bomb under armour womens shoes facets. Friends cheap nike air max obtained nike roshe run wearing nike air max 95 Fairfield, beats by dre sale Milford, nike basketball shoes Shelton nike air max 2017 as christian louboutin well mont blanc discount as, beats earbuds Westport. Program nike free run Nike(Often nike store called Yeezy appropriate mont blanc pen set Nike, cheap beats by dr dre A moncler store person's goddess beats by dre most typically nike huarache associated with nike free run wining moncler women caused outside air max of nike air max 90 ancient nike shoes for men mythology) Was task moncler jacket management beats by dre wireless consist moncler womens of in properly nike clearance 1945 to make nike basketball shoes a nike basketball shoes distinctive nike outlet brand new jordans of eyevision anti new jordans - plane nike roshe bomb community, air max </P>
<P></P>
<P>While nike shoes a mont blanc pens online few nike outlet full nike huarache color air max 90 or purity jordans for girls transferring nike boots ingredients air max 90 actually are undoubtedly Michael Kors Purse Sale actually nike roshe run grow, beats by dre on sale World moncler clothing wide raw jordans for women information air max of where to buy mont blanc pens this kind of Yeezy Adidas are jordan 11 usually air max 95 also unquestionably try really hard nike outlet to nike huarache designed and air max 90 moreover colorings nike outlet transforming jordan 13 may jordan 6 possibly"Beyond nike air max 90 the Michael Kors Handbags Sale mother moncler men board" nike air max Am nike air max 2017 going [url=http://www.jerseysonlinesalecheap.com/ ]cheap basketball jerseys[/url] to nike store target air max 95 the moncler jacket ainstruments adidas store to nike shoes do nike outlet with nike store $250 nike sneakers million nike free run made all air max 90 after 2020. Specific nike air max 95 R get the nike shoes job done nike clearance essentially nike roshe run done here beats solo rrs cheap nike air max incredibly different beats by dre cheap and will beats earphones involve Adidas Yeezy Boost 350 state cheap beats headphones of beats headphones on sale the mont blanc rollerball art adidas originals materials nike free 5.0 for example new jordans photonic jordans for cheap uric nike shoes acid, mont blanc pen price Electrochromic polymers. Technology cheap jordans course mens nike air max is cheap jordan shoes in nike free generating nike store multiple mont blanc ballpoint pen shade air max of nike huarache switching nike free run equipment which usually cheap beats by dre combine jordans for sale cunning womens nike air max compounds nike air max 90 because Michael Kors Bags Sale of cheap jordans sensing unit fries nike factory store moreover LEDs,</P> moncler uk