2011-05-26 112 views
4

我創建了一個非常簡單的數值模擬,可以模擬一個物體以某個角度從建築物上拋出,並且當物體撞擊地面時,模擬停止。現在我想添加碰撞檢測。我會如何去做這件事? 我知道我需要找到物體(一個球)撞擊地面的確切時間,以及x和y方向的速度以及物體撞擊地面時的位置,而且我必須添加表明球會在衝擊中反彈的參數。但我不知道如何去做這件事。我知道檢測碰撞的方法有很多,但由於我對此很陌生,所以最容易理解的方法是最好的。二維運動中的碰撞檢測

+1

[Wham!](http://www.gamasutra.com/view/feature/3015/pool_hall_lessons_fast_accurate_.php)(該鏈接演示了檢測碰撞的快速,準確和「簡便」的方法。) – 2011-05-26 22:50:20

+1

聽起來像2D,而不是1D,運動。 – 2011-05-26 22:53:39

+0

有一些簡單的公式可以找出所有這些信息,除非你需要*來模擬它,你應該只是看看它們。統計通過計算[速度](http://en.wikipedia.org/wiki/Velocity)並從那裏去。 – meagar 2011-05-26 23:18:25

回答

1
  • 創建一個座標系,地面在y = 0。跟蹤球飛行時的座標,然後檢查它是否有y = 0,這就是它碰到地面的地方。您也可以在球移動時跟蹤x和y速度。

  • 使用物理技巧。 This是一個很好的教程。如果你有它,我推薦Halliday,Resnick和Walker的物理基礎。他們在這方面有很好的一章。

0

碰撞檢測只涉及確定2個物體之間的距離。

如果你只在對象和地面之間的碰撞有興趣,你可以使用:

if(object.y <= ground.y) { 
    //collision occurred 
} 

要做到對象之間的碰撞,你可以通過所有對象循環,以同樣的方式他們互相比較。

+0

我不明白的是如何實現實際的碰撞。發生碰撞時我該怎麼辦? – kachilous 2011-05-26 22:52:29

+0

@ kachilous您可以吸收能量,使物體粘附在地面上。你可以使物體以一半速度在地面上「反彈」。對於這個問題沒有正確的答案 - 這取決於你想要實現它的複雜程度(世界級的物理引擎!),多快(用於遊戲中的實時渲染)以及你的生活有多少寶貴的時間你願意浪費它。 (有可用的「免費」超級真棒物理引擎 - Havok,Bullet等) – 2011-05-26 22:57:03

1

如果您只是在尋找數學,那麼您可以編寫C代碼。我發現這個有幫助。 Math Models