He implementado un motor de física basado en los conceptos del texto clásico Advanced Character Physics de Thomas Jakobsen. La fricción solo se discute muy brevemente en el artículo y el propio Jakobsen señala cómo "otros y mejores modelos de fricción que esto podrían y deberían implementarse".
En general, ¿cómo podría uno implementar un modelo de fricción creíble sobre los conceptos del artículo mencionado? ¿Y cómo podría traducirse la fricción encontrada en rotación en un círculo?
No quiero que esta pregunta sea sobre mi implementación específica sino sobre cómo combinar las ideas de Jakobsens con un gran sistema de fricción en general. Pero aquí hay una demostración en vivo que muestra el estado actual de mi motor que no maneja la fricción de ninguna manera: http://jsfiddle.net/Z7ECB/embedded/result/
A continuación se muestra una imagen y un ejemplo de cómo la detección de colisión podría funcionar en un motor basado en el documento. En la integración de Verlet, la posición actual y la anterior siempre se almacenan. Sobre esta base se calcula una nueva posición. En cada cuadro calculo la distancia entre los círculos y las líneas. Si esta distancia es menor que el radio de un círculo, se produjo una colisión y el círculo se proyecta perpendicularmente fuera de la línea ofensiva de acuerdo con el tamaño de la superposición (desplazamiento en la imagen).
La velocidad está implícita debido a la integración de Verlet, por lo que cambiar de posición también cambia la velocidad. Lo que necesito saber es determinar de alguna manera la cantidad de fricción en el círculo y moverlo hacia atrás paralelo a la línea para reducir su velocidad.