2010-01-24 12 views
15

Ok, así que tiene montón de bolas:¿Necesita ayuda con la colisión y la rotación del círculo? - Juego de Física

Ignight Balls


Lo que estoy tratando de averiguar es cómo hacer que estos círculos:

  • Girar en función de las superficies que están tocando

  • Fija la penetración de colisión cuando se trata de múltiples tocando objetos.


EDIT: Esto es lo que quiero decir con rotación

alt text

  • bola 0 rotará en sentido antihorario ya que es apoyado en la bola de 3

  • bola 5 rotará las agujas del reloj ya que es se inclina en bola 0


A pesar de que las soluciones a este son universales, sólo para el registro Estoy usando Javascript y SVG, y preferiría implementar esto por mí mismo en lugar de usar una biblioteca.

Ayuda sería muy apreciada. ¡Gracias! :)

+0

No estoy seguro de entender lo que quiere decir con el primer elemento de viñeta. ¿Puedes elaborar? – duffymo

+1

Si la Bola 0 cae y golpea la Bola 3, girará en sentido antihorario, creo que eso es lo que quiere decir. – Harmen

+0

Sí exactamente, o si una pelota se apoya en otra bola, girará hacia un lado. – RadiantHex

Respuesta

6

Éstos son algunos enlaces que creo que le ayudaría a salir en su búsqueda:

Box2D

Advanced Character Physics

Javascript Ball Simulation

Box2D tiene lo que busca, y su código abierto I creer. Puede descargar los archivos y ver cómo hacen lo que hacen para lograr su efecto.

Avísame si esto ayuda, tratando de mejorar al responder preguntas aquí. :)

EDIT:

Así que siguió adelante y pensaron que esto fuera sólo un poco más para dar una cierta penetración en cuanto a cómo iba a acercarse a ella. Eche un vistazo a la imagen a continuación:

Básicamente, compare los ángulos en una cuadrícula, si la bola está cayendo +30 grados en comparación con la bola en la que cae, gire la bola positivamente. Si cae -30 grados en comparación con la pelota en la que cae, rota la pelota negativamente. No estoy diciendo que esta sea la solución correcta, pero solo de pensarlo, esta es la forma en que abordaría el problema desde el principio.

alt text http://img686.imageshack.us/img686/9256/angles.jpg

6

Desde el punto de vista de la física, parece que desea conservar lineal y angular momentum.

Como punto de partida, querrá establecer las matrices ODE que modelan ambas y luego realizar un poco de álgebra lineal para resolverlas. Yo personalmente usaría Numpy/Scipy (probablemente usando una matriz dispersa) para esa solución. Pero hay muchos enfoques (se le ocurre a sympy). ¿Qué módulos quieres usar?

Querrá familiarizarse con coefficient of restitution y coefficient of friction y decidir si también quiere conservar la energía cinética. (¿Quieres/me importa si siguen rebotando y dando vueltas para siempre?) (probablemente también necesitarás matrices de energía)

Resolverás estas matrices cada paso de tiempo mientras verificas que no haya dos bolas los centros están más cerca que la suma de los dos radios. (... y si lo hacen, ajusta los términos de momento y energía para una condición posterior a la colisión)

Esto es solo el comienzo más básico de un gran proyecto.¿Puedo preguntar por qué quieres hacer esto desde cero?

+0

Hola bpowah. Gracias. Ya he implementado parte de lo que mencionaste. Pero estoy atascado con la fijación de las coordenadas obj durante la penetración cuando varios objs se tocan entre sí. Y no tengo ni idea de cómo hacer que los objs giren "conceptualmente". – RadiantHex

+0

No estoy seguro de saber exactamente a qué te refieres con "arreglar obj coords durante la penetración". ¿Puedo suponer con seguridad que puedes resolver la ubicación de cada bola al final de un paso de tiempo mientras mantienes la conservación de todos los términos de momento? Si es así, ¿cómo es diferente de lo que quieres? – Paul

+0

Es posible decir que, después de un intervalo de tiempo determinado, varias bolas pueden interpenetrarse y le cuesta resolverla. Hace dos años que no estoy en el campo de la física/juegos, pero recuerdo que es relativamente fácil de usar, relajando el término, relajación. Básicamente, al final de cada paso, se aleja a cada par el uno del otro e itera durante una cantidad fija de pasos o hasta que las interpeneraciones son más pequeñas que otras. Pero podría haber olvidado alguna "peculiaridad" aquí. –

Cuestiones relacionadas