Tengo problemas para evitar colisiones sin alinear por lo que creo que es un caso raro. He configurado dos objetos para que se muevan uno hacia el otro, pero con un ligero desplazamiento, por lo que uno de los objetos se mueve ligeramente hacia arriba y uno de los objetos se mueve ligeramente hacia abajo.
En mi algoritmo de dirección para evitar colisiones no alineado, encuentro los puntos en la línea de avance del objeto y la línea de avance del otro objeto donde estas dos líneas son las más cercanas. Si estos puntos más cercanos están dentro de una distancia de evitación de colisión, y si la distancia entre ellos es menor que los dos radios de las esferas de delimitación de los dos objetos, entonces los objetos deben alejarse en la dirección apropiada.
El problema es que, en mi caso, se calcula que los puntos más cercanos en las líneas están muy lejos del punto de colisión real. Esto se debe a que las dos líneas hacia adelante para cada objeto se alejan entre sí a medida que pasan los objetos. El problema es que debido a esto, no se realiza la dirección y los dos objetos chocan parcialmente.
¿Alguien tiene alguna sugerencia sobre cómo puedo calcular correctamente el punto de colisión? ¿Quizás teniendo en cuenta de alguna manera el tamaño de los dos objetos?
fuente
Respuestas:
Este es, con mucho, el mejor artículo de detección de colisión de bola a bola que he encontrado.
Lecciones de la sala de billar: detección rápida y precisa de colisiones entre círculos o esferas
fuente
No quieres encontrar el punto más cercano.
Desea encontrar el punto en las líneas donde la distancia es igual a los radios combinados de ambas esferas.
fuente
Si entiendo su pregunta correctamente, simplemente puede usar una prueba de intersección Esfera vs Esfera, como ha sugerido AttackingHobo.
La matemática para hacer tal prueba es la siguiente (corrígeme si me equivoco, ha pasado un tiempo). Además, esto está considerando que sus esferas tienen un centro y una variable de radio cada una.
La fórmula para verificar es algo como esto:
Tienes una intersección esfera vs esfera. Esto es bastante simple, ¡veamos cómo se ve en el código!
Una vez más, creo que esta es la respuesta correcta que puede estar buscando. Si alguien sabe que esto está mal, corrígeme, ya que ha pasado un tiempo desde que hice estos cálculos.
fuente
Ok, espero que esto tenga sentido ... Obtenga los vectores de las bolas y calcule su punto de colisión, llame a esto p1. Encuentre el ángulo entre los 2 vectores, llame a esto a1. En a1 / 2 dibuje una línea, esto estará en el medio exacto en grados entre los dos vectores. Necesita la ubicación en esta línea donde sin (a1 / 2) = (radio1 + radio2) / 2. Si esta imagen se visualiza en mi cabeza derecha, aquí es donde ocurre la colisión. Lo siento si esto está mal ... es tarde.
fuente