Я реализовал физический движок, основанный на концепциях в классическом тексте « Продвинутая физика персонажей » Томаса Якобсена. Трение обсуждается очень кратко в статье, и сам Якобсен отмечает, как «другие и лучшие модели трения, чем эта, могли и должны быть реализованы».
Как вообще можно реализовать правдоподобную модель трения поверх концепций из упомянутой статьи? И как можно найти найденное трение во вращении по кругу?
Я не хочу, чтобы этот вопрос был о моей конкретной реализации, а о том, как объединить идеи Якобсенса с более широкой системой трения в более общем плане. Но вот живая демонстрация, показывающая текущее состояние моего двигателя, который никак не обрабатывает трение: http://jsfiddle.net/Z7ECB/embedded/result/
Ниже показано изображение и пример того, как обнаружение столкновений может работать в двигателе на основе документа. В интеграции Verlet текущая и предыдущая позиция всегда сохраняется. На основании этого рассчитывается новая позиция. В каждом кадре я вычисляю расстояние между кругами и линиями. Если это расстояние меньше радиуса окружности, произошло столкновение, и окружность проецируется перпендикулярно от линии отклонения в соответствии с размером перекрытия (смещение на рисунке).
Скорость является неявной благодаря интеграции Verlet, поэтому изменение положения также меняет скорость. Что мне нужно знать, так это как-то определить величину трения на круге и переместить его назад параллельно линии, чтобы уменьшить его скорость.