向量几何在游戏编程中的使用系列二之2-D物体间的碰撞响应
2019獨角獸企業重金招聘Python工程師標準>>>
2-D物體間的碰撞響應
這次我要分析兩個球體之間的碰撞響應,這樣我們就可以結合以前的知識來編寫一款最基本的2-D臺球游戲了,雖然粗糙了點,但卻是個很好的開始,對嗎?
一、初步分析
中學時候上物理課能夠認真聽講的人(我?哦,不包括我)應該很熟悉的記得:當兩個球體在一個理想環境下相撞之后,它們的總動量保持不變,它們的總機械能也守恒。但這個理想環境是什么樣的呢?理想環境會不會影響游戲的真實性?對于前者我們做出在碰撞過程中理想環境的假設:
1)首先我們要排除兩個碰撞球相互作用之外的力,也就是假設沒有外力作用于碰撞系統。
2)假設碰撞系統與外界沒有能量交換。
3)兩個球體相互作用的時間極短,且相互作用的內力很大。
有了這樣的假設,我們就可以使用動量守恒和動能守恒定律來處理它們之間的速度關系了,因為1)確保沒有外力參與,碰撞系統內部動量守恒,我們就可以使用動量守恒定律。2)保證了我們的碰撞系統的總能量不會改變,我們就可以使用動能守恒定律。3)兩球發生完全彈性碰撞,不會粘在一起,沒有動量、能量損失。
而對于剛才的第二個問題,我的回答是不會,經驗告訴我們,理想環境的模擬看起來也是很真實的。除非你是在進行科學研究,否則完全可以這樣理想的去模擬。
現在,我們可以通過方程來觀察碰撞前后兩球的速度關系。當兩球球心移動方向共線(1-D處理)時的速度,或不共線(2-D處理)時共線方向的速度分量滿足:
(1)m1 * v1 + m2 * v2 = m1 * v1' + m2 * v2' (動量守恒定律)
(2)1/2 * m1 * v1^2 + 1/2 * m2 * v2^2 = 1/2 * m1 * v1'^2 + 1/2 * m2 * v2'^2 (動能守恒定律)
這里m1和m2是兩球的質量,是給定的,v1和v2是兩球的初速度也是我們已知的,v1'和v2'是兩球的末速度,是我們要求的。好,現在我們要推導出v1'和v2'的表達式:
由(1),得到v1' = (m1 * v1 + m2 * v2 - m2 * v2') / m1,代入(2),得
1/2 * m1 * v1^2 + 1/2 * m2 * v2^2 = 1/2 * m1 * (m1 * v1 + m2 * v2 - m2 * v2')^2 + 1/2 * m2 * v2'^2
=> v2' = (2 * m2 * v1 + v2 * (m1 - m2)) / (m1 + m2),則
=> v1' = (2 * m1 * v2 + v1 * (m1 - m2)) / (m1 + m2)
我們現在得到的公式可以用于處理當兩球球心移動方向共線(1-D處理)時的速度關系,或者不共線(2-D處理)時共線方向的速度分量的關系。不管是前者還是后者,我們都需要把它們的速度分解到同一個軸上才能應用上述公式進行處理。
轉載于:https://my.oschina.net/liu-xuewei/blog/77230
總結
以上是生活随笔為你收集整理的向量几何在游戏编程中的使用系列二之2-D物体间的碰撞响应的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS 常用属性
- 下一篇: 一段基于Jsoup和Dom4j的海报爬取