Вычисление результирующего вектора скорости после двумерного столкновения

В настоящее время у меня есть игра с мини-физикой, в которой используется разделительная теорема о оси для обнаружения и ответа на столкновение, однако я пришел в тупик, когда обнаружил, что документации относительно того, что происходит со скоростью объекта после столкновения с другой фигурой, обнаружение.

Вот две схемы того, о чем я говорю.

введите описание изображения здесь

введите описание изображения здесь

Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?

Вся информация, которая может быть задана после столкновения, является минимальным вектором проникновения.

EDIT: Найденный код онлайн, который очень связан с этим, но я не понимаю его:

void CBody::ProcessCollision(CBody& xBody, const Vector& N, float t) { Vector D = m_xDisplacement - xBody.m_xDisplacement; float n = D * N; Vector Dn = N * n; Vector Dt = D - Dn; if (n > 0.0f) Dn = Vector(0, 0); float dt = Dt * Dt; float CoF = s_fFriction; if (dt < s_fGlue*s_fGlue) CoF = 1.01f; D = -(1.0f + s_fRestitution) * Dn - (CoF) * Dt; float m0 = GetInvMass(); float m1 = xBody.GetInvMass(); float m = m0 + m1; float r0 = m0 / m; float r1 = m1 / m; m_xDisplacement += D * r0; xBody.m_xDisplacement -= D * r1; } 

Обнаружение столкновений и способы обработки столкновений – это две разные вещи.

Что происходит после того, как столкновение зависит от того, какую физику вы пытаетесь достичь.

Например, в вашей верхней картине предположим, что красная часть – это неподвижная стена, и только синяя часть движется. Вектор движения голубой части уже расщеплен в ортогональных частях, параллельных и перпендикулярных к поверхности красной стены. Простым способом обработки столкновений в этом случае было бы просто перевернуть компонент вектора скорости, перпендикулярного стенке. Таким образом, вектор [-4, 10] станет [4,10].

Interesting Posts