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.
fuente
Respuestas:
Deberías echar un vistazo al artículo de Mathias Mueller et all sobre la "dinámica basada en la posición". Básicamente es lo mismo que el documento de Jacobson y él podría darle más información sobre la fricción.
http://www.matthiasmueller.info/publications/posBasedDyn.pdf
Afirman que la fricción está básicamente amortiguando la velocidad de la partícula en el plano de la colisión en algún valor escalar.
Tenga en cuenta que esto no le proporciona ningún efecto de fricción de culombio (la cantidad de impulso en la colisión no afecta la magnitud de la fuerza de fricción), pero podría obtenerlo considerando la velocidad de la partícula en el plano de colisión.
fuente
En un motor de cuerpo rígido "normal" modelaría la fricción como impulsos perpendiculares a lo normal. Supongo que, en este contexto, eso significaría, en lugar de impulsos, establecer la posición de la partícula afectada de manera apropiada. Con las restricciones establecidas, esto debería, si entiendo el artículo correctamente, alcanzar iterativamente un estado donde la fricción también haya afectado la rotación. Supongo que por "mejor modelo" el autor se refiere a una mejor manera de determinar la cantidad de fricción que una proyección lineal de interpenetración. Sin embargo, esto es una suposición de mi parte, ya que nunca he implementado la física con este enfoque.
EDITAR:
Para calcular el tamaño de las fuerzas de fricción, tiene el valor de desplazamiento en su imagen. Como está usando verlet con un paso de tiempo fijo, sabemos que este desplazamiento es en realidad la velocidad que tenía el contacto en la dirección del contacto normal (bueno, no exactamente, y creo que esto es lo que el autor quiere decir al hacer una mejor aproximación de la fricción ) Conocer la velocidad a lo largo del contacto normal es esencial, ya que podemos usarlo para determinar el impulso. La mejor manera es aplicar fricción en forma de impulsos en cada cuadro donde hay un contacto. El tamaño de la fricción en los ejes paralelos al plano de contacto está determinado por el coeficiente de fricción (determinado por los materiales, por ejemplo 0.7 para una fricción bastante alta). La fricción máxima que podría tener es el coeficiente de fricción multiplicado por el desplazamiento. Tenga en cuenta que este valor podría ser mayor que la velocidad real a lo largo de uno de los ejes. En ese caso, tiene fricción estática y la partícula no debe moverse en absoluto en ese eje. Si el valor es menor, la partícula se moverá un poco pero se ralentizará, es decir, la fricción dinámica.
fuente