3

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

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

enter image description here

enter image description here

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

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

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; 
} 

ответ

0

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

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

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

+0

Хотя это сработает, ваш же метод не будет работать во всех случаях из-за того, что у вас нет принципа выбора компонента, который вы хотите перевернуть. То, что я пытаюсь достичь, - это физическое физическое моделирование тела. – HDalton

+0

С идеальной эластичностью или с реальными потерями? С трением или без трения? Есть много вариантов, которые могут быть сделаны, которые влияют на сложность физического движка. Мой пример - одна из самых простых моделей. Мой совет - начать с очень простой модели и сделать ее более сложной, когда это необходимо. –