Modelado del movimiento de una pelota que rebota

Estoy escribiendo un programa que muestra una línea de texto y anima una pelota que rebota de sílaba a sílaba (como un canto). El programa conoce la ubicación de cada sílaba y sabe a qué hora debe estar la pelota en cada sílaba.

Tengo un conjunto de ecuaciones que funcionan bien, pero no muy bien. Se me ocurrieron hace unos años después de mucho googlear y tropezar. Toman la ubicación de la sílaba anterior ( X 0 , y 0 ), la ubicación de la siguiente sílaba ( X 1 , y 1 ), el tiempo t (desde el inicio 0 hasta el final 1), y calcule dónde debería estar la pelota ( X , y ):

d = X 1 X 0
v = d / t
h = 5 + 0.3 | d |
X ( t ) = X 0 + v t y ( t ) = y 0 h + [ 4 h d 2 ( | d | 2 | v | t ) 2 ]

Lo que me gustaría es un mejor conjunto de ecuaciones que modelen con mayor precisión el movimiento de una pelota que rebota. Una pelota con mente propia, supongo, ya que necesita cambiar de velocidad y dirección con cada nueva sílaba.

Tal vez me equivoque, pero me parece que querrías usar ecuaciones de movimiento de proyectiles, en lugar de una pelota que rebota. Conseguir un adecuado v podría ser un poco más complicado, pero tal vez más físicamente de esta manera?
La conservación del impulso podría invalidar las direcciones de cambio de bola...
Las ecuaciones de proyectiles de @KyleKanos parecen prometedoras. Creo que necesitaría definir v y theta en términos de d, pero no sé cómo hacerlo.
Debería especificar el ángulo , pero se puede hacer: d = v 2 pecado ( 2 θ ) / gramo (el enlace utiliza d = R ).

Respuestas (1)

Necesitas la posición de la pelota. ( X ( t ) , y ( t ) ) para 0 < t < 1 Estoy gordo t = 0 , la pelota fue lanzada con velocidad inicial ( v X , v y ) en la posición ( X 0 , y 0 ) en un campo gravitatorio de aceleración a = ( a X , a y ) = ( 0 , gramo ) . Hay que calibrar la velocidad para que la bola llegue al punto ( X 1 , y 1 ) en t = 1 .

La posición de la pelota está dada por

X ( t ) = X 0 + v X t
y ( t ) = y 0 + v y t gramo t 2 2

queremos obtener ( v X , v y ) Llegar X ( t = 1 ) = X 1 y y ( t = 1 ) = y 1 , entonces,

X ( t = 1 ) = X 0 + v X = X 1
y ( t = 1 ) = y 0 + v y gramo 2 = y 1

y por lo tanto,

v X = X 1 X 0
v y = y 1 y 0 + gramo 2

y finalmente, sus ecuaciones de movimiento son:

X ( t ) = X 0 + ( X 1 X 0 ) t
y ( t ) = y 0 + ( y 1 y 0 + gramo 2 ) t gramo t 2 2

¡Gracias, eso funcionó totalmente! Realmente aprecio tener una ecuación sólida detrás de esto, y no lo que sea que había hecho antes. Una cosa que noté es que con estas ecuaciones la pelota siempre llega al mismo punto más alto. Me gustaría que la pelota fuera más alta para distancias más largas y más baja para distancias más cortas, así que varío g según la distancia. Encontré que g = 3 * |x1 - x0| funciona bien para mi uso particular. Si resulta que hay una mejor manera de lograrlo, me encantaría saberlo. ¡Gracias de nuevo!
Lo que puedes hacer es obtener las ecuaciones anteriores tomando x(t')=x1 e y(t')=y1. Entonces, ahora 0<t<t'. A continuación, puede elegir t' arbitrariamente. Cuanto mayor sea t', más alto irá la pelota. Por lo tanto, puede elegir t' proporcional a |x1-x0|, esto es, t' = K|x1-x0|, y calibrar K hasta que el punto más alto que alcance la pelota le resulte satisfactorio.