La teoría.
La fuerza que actúa sobre un punto →pi se puede definir, según la primera ley de Newton, como:
→Fi=mi→ai
Si despejamos la aceleración nos queda:
→ai=1mi→Fi
Como la aceleración es la derivada de la velocidad con respecto al tiempo:
d→vidt=1mi→Fi
Teniendo en cuenta que la fuerza total aplicada sobre el punto →pi es la suma de cada una de las fuerzas aplicadas en ese punto:
d→vidt=1mi∑j→Fij
Siendo →Fij la fuerza aplicada en el punto →pi por parte del muelle que conecta dicho punto al punto →pj. Desarrollando la ecuación anterior utilizando la ley de Hooke para el cálculo de →Fij, obtenemos el siguiente sistema de ecuaciones diferenciales:
d→vidt=1mi∑j(kmij→eij−kaij(→vi−→vj))
d→pidt=→vi
Siendo:
→pi = El vector posición del punto i.
→vi = El vector velocidad del punto i (derivada de →pi con respecto al tiempo).
→vj = El vector velocidad del punto j (derivada de →pj con respecto al tiempo).
→eij = El vector elongación del punto i con respecto al punto j.
mi = La masa del punto i.
kmij = La constante del muelle que une los puntos i y j.
kaij = La constante del amortiguador que une los puntos i y j.
En esta ecuación, kmij→eij es la fuerza del muelle puro y kaij(→vi−→vj) es la fuerza del amortiguador.
El vector de elongación →eij se calcula de la siguiente manera:
Siendo lrij la longitud, en reposo, del muelle que une los puntos →pi y →pj.
Si Distancia(→pi,→pj)<lrij, entonces →eij es el vector unitario que va de →pj a →pi.
Si Distancia(→pi,→pj)>lrij, entonces →eij es el vector unitario que va de →pi a →pj.
Si Distancia(→pi,→pj)=lrij, entonces →eij=(0,0).
El sumatorio debe recorrer todos los j que representen puntos unidos al punto i mediante un muelle.
Para implementar las ecuaciones diferenciales se puede aplicar el método de Euler (tiene un buen comportamiento para intervalos de t pequeños y constantes y es múy fácil de programar aunque el error es un poco alto). Lo que se suele recomendar en foros de programación es el método de Runge-Kutta de cuarto orden: no es complicado de implementar y tiene un error razonablemente bajo.
Implementación mediante el método de Euler.
Para una ecuación diferencial de la siguiente forma:
dydt=f(t,y)
Podemos aproximar de forma numérica la integral resultante:
y=∫f(t,y)dt
mediante la siguiente ecuación de recurrencia:
yn+1=yn+hf(tn,yn)
Siendo h el ancho del intervalo de integración en el tiempo (cuando más chico mejor). Si integramos el sistema de ecuaciones diferenciales del sistema de puntos unidos por muelles:
→vi=∫1mi∑j(kmij→eij−kaij(→vi−→vj))dt
→pi=∫→vidt
podemos aplicar el método de Euler de forma directa:
→vi[n+1]=→vi[n]+h1mi∑j(kmij→eij[n]−kaij(→vi[n]−→vj[n]))
→pi[n+1]=→pi[n]+h→vi[n]
h es el ancho en segundos de cada intervalo de simulación. Esta h se puede calcular de la siguiente manera:
h=1fps
Siendo fps la tasa de refresco en frames por segundo.
En esta web he implementado en javascript y HTML5 un pequeño sistema de cuatro masas unidas por muelles. Haciendo click con el ratón se pueden mover las masas e interactuar con el sistema.
[ añadir comentario ] ( 1793 visualizaciones ) | [ 0 trackbacks ] | enlace permanente |




