3

目前我有一個迷你物理遊戲,它使用分離軸定理來進行碰撞檢測和響應,但是當我發現沒有太多關於碰撞檢測和響應的文檔時,我停下來了。使用SAT碰撞檢測與其他形狀碰撞後的物體速度。計算2D碰撞後的合成速度矢量

下面是我正在談論的兩個圖。

enter image description here

enter image description here

任何人都可以點我到正確的方向嗎?

碰撞後可以給出的所有信息是最小穿透向量。

編輯:發現了一些代碼網上說的這個非常相關的,但我不明白:

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

具有完美的彈性或與現實世界的損失?有無摩擦?有很多選擇可以影響物理引擎的複雜性。我的例子只是最簡單的模型之一。我的建議是從一個非常簡單的模型開始,並在必要時使其更加複雜。 –