Necesito repasar mi trigonometría y espero que puedan ayudar aquí con un modelo matemático simple. Aquí está mi modelo hasta ahora en la imagen adjunta. Soy consciente de que la animación de cuadros tiene otros problemas cuando la pelota se mueve muy rápido, pero por ahora solo necesito calcular ballDx y ballDy. También es posible que ballDx = 0 (solo movimiento vertical), pero cuando la bola se desvía, ballDx puede obtener un valor diferente.
46
Respuestas:
Nota: Todo lo siguiente supone que la superficie de la pelota no tiene fricción (por lo que no comenzará a girar o rebotar de manera diferente porque sí lo es).
En el momento de la colisión, la pelota estará tocando la esquina. Cuando los objetos sólidos colisionan, una fuerza actuará a lo largo de la llamada superficie normal, es decir, perpendicular a la superficie en el punto de colisión.
Como es una pelota, perpendicular a la superficie es hacia el centro de la pelota. Ok, entonces sabemos la dirección de la fuerza, ¿qué pasa con su magnitud? Suponiendo una colisión elástica (y que el rectángulo no puede moverse), la pelota debe rebotar a la misma velocidad con la que impactó.
Sea (nDx, nDy) la velocidad después de la colisión, (oDx, oDy) la velocidad antes de la colisión y (x, y) la posición de la pelota en el punto de colisión. Supongamos además que la esquina con la que colisiona la pelota está en (0,0).
Expresando nuestras ideas como fórmulas, tenemos:
Lo que es equivalente a:
Sustituyendo las dos primeras ecuaciones en la última, obtenemos:
Expansión utilizando el teorema binomial
rendimientos:
Esta ecuación cuadrática para
c
tiene dos soluciones, una de las cuales es 0. Obviamente, esa no es la solución que nos interesa, ya que generalmente la dirección de la pelota cambiará como resultado de la colisión. Para obtener la otra solución, dividimos ambos lados entre c y obtenemos:Es decir:
Para resumir, tenemos:
Editar : en el código:
Algunas consideraciones de implementación: si bien puede aproximarse (x, y) con la posición de la pelota después del paso de simulación, esta aproximación cambiará el ángulo de desviación y, por lo tanto, será muy notable, por lo que sus pasos de simulación deben ser muy finos (tal vez la pelota no se mueve más de 1/20 de su diámetro por paso). Para una solución más precisa, puede calcular el momento en que ocurre la colisión y dividir ese paso de simulación en ese momento, es decir, hacer un paso parcial hasta el punto de colisión, y otro paso parcial para el resto del paso.
Edición 2: Calcular el punto de impacto
Sea r el radio, (x0, y0) la posición y (dx, dy) la velocidad de la pelota al comienzo del paso de simulación. Para simplificar, supongamos que la esquina en cuestión se encuentra en (0,0).
Sabemos:
Queremos
Es decir
Esa es una ecuación cuadrática en t. Si es discriminante
es negativo, no tiene soluciones, es decir, la pelota nunca golpeará la esquina en su curso actual. De lo contrario, sus dos soluciones están dadas por
Estamos interesados en el momento en que comenzó la colisión, que es el momento anterior
t1
.Tu método se convertiría en:
fuente
At the moment of collision, the ball will be touching the corner
pero no veo una justificación de esta aproximación (y debe ser una aproximación porque no es cierto: la pelota se toca en dos lugares, ninguno de los cuales es la esquina).Aquí hay una forma visual de ver un problema.
El conjunto de problemas original es círculo versus rectángulo (gris en la imagen a continuación). Esto es equivalente a punto vs. rectángulo redondeado (se muestra en negro).
Entonces este es un problema de varias partes. Está probando su colisión de puntos frente a 4 líneas (extruidas desde el borde de la caja por el radio del círculo original) y 4 círculos (en las esquinas del rectángulo con el mismo radio del círculo original).
Con la velocidad aproximada en su imagen original, el punto alcanzará el círculo de la esquina inferior derecha. Todo lo que tiene que hacer es calcular el punto en el círculo de la esquina que golpearía, calcular el ángulo de ese ángulo y reflejarlo.
Dejaré la derivación de eso como un ejercicio para el lector.
fuente
Estoy trabajando en un juego y también atascado aquí. Pero supongo que va de esta manera:
Hay otra opinión. Mi problema es que no sé cómo calcular rápidamente el nuevo dx, dy (para mí, usar las matemáticas tradicionales requiere demasiados cálculos).
fuente
La cinemática se trata de elegir el marco de referencia correcto, como el más conveniente para los cálculos.
Aquí definiremos primero la transformación T que resuelve nuestros ejes en componentes paralelos ( x ' ) y perpendiculares ( y' ) a una línea entre el centro de la pelota y la esquina. La transformación inversa T * restaurará nuestro sistema de coordenadas original.
En este nuevo marco de referencia, por reflexión (y la simetría del tiempo y el espacio de la física), tenemos la transformación de la velocidad del contacto M (un impulso puntual ) como la que invierte el componente x ' y deja sin cambios el componente y' . En términos de matriz , esta es la matriz diagonal con -1 y 1 en la diagonal.
Entonces la velocidad después de la colisión es simplemente: V ' = T * . M . T . Vo .
El momento del impacto t es entonces la solución para ( T . Do ) + ( X . T . Vo ) ( t ) = r , donde X es el operador de proyección del eje X y r es el radio de la bola. Reorganizado, obtenemos
t = ( r - ( T . Do )) / (( X . T . Vo ) ( t ))
Esto tiene la clara ventaja de enterrar todas las matemáticas complejas en bibliotecas de gráficos estándar rigurosamente escritas, probadas y depuradas. Esta solución también es idéntica para situaciones 2D y 3D: simplemente cambie la biblioteca de gráficos. Finalmente, destaca que uno debe pensar primero en los marcos de referencia apropiados antes de abordar cualquier problema de física. Siempre existe la tentación de los NIH, pero en realidad eso es solo una receta para errores cuando hay soluciones más concisas disponibles.
fuente