Итак, я работал над двумерным физическим движком, который поддерживает многоугольники и круги. Я использовал теорему о разделяющей оси для всех комбинаций столкновений, кроме круга-круга. Вот основной формат движка:
* ПРИМЕЧАНИЕ: НЕ АКТУАЛЬНЫЙ КОД
Продвижение всех тел.
for every body a
{
Vector2 sum = Vector2.Zero;
for every body b where b != a
{
sum += a.collides(b).MinimumTranslationVector;
}
a.Position += sum;
a.velocity += sum;
}
Вот видео с моей проблемой: http://www.youtube.com/watch?v=kSZeuP4AiQ0&feature=youtu.be
Ошибка - эффект пружины, который виден в начале. Я ломал голову, пытаясь придумать проблему, и ничего не придумал. Может кто-нибудь сказать мне, в чем проблема?