2012-01-10 44 views
2

這是我爲大學任務而努力的事情,我對它很陌生,但我在這方面做了大量的閱讀。請有人用最簡單的術語來解釋如何做我想做的事情,以便我能理解需要發生什麼?檢測多個對象之間碰撞的正確方法是什麼?

我有一個對象數組,每個對象畫一個圓圈;我讓他們在一個邊框內彈跳,但現在我想讓他們碰撞。

我寫了下面的方法,這是工作......但只是只是。球偶爾會卡在一起,'抖動',我不知道爲什麼會發生這種情況。另外,我想我正在檢查比所需更多的碰撞(?)。

void handleObjectCollision() { 

for(int i = 0; i < _myBtns.length; i++) { 

if(i != _id) { 

    float dx = _myBtns[i].x - x; 
    float dy = _myBtns[i].y - y; 
    float distance = sqrt(dx*dx + dy*dy); 

    if(distance < r * 2) { 
     xS = -xS; 
     yS = -yS; 

     // Debug 
     // println("Collision!"); 
    } 

    } 

} 

我的階級和有關段的充分貼合可以在這裏找到:http://pastebin.com/eJawiHAE

此外,這裏是我一直在努力的一個例子,http://processing.org/learning/topics/bouncybubbles.html

我試圖實現一個簡單的反彈(速度反轉?),沒有添加物理或使用矢量,因爲我希望能夠理解最簡單的形式發生了什麼,首先。

謝謝。

+0

什麼是xS和yS? – mshang 2012-01-10 21:46:10

+0

@mshang似乎是yS和yS-- x和y座標的球的速度。但我不明白什麼是x和y(在expr中:_myBtns [i] .x-x)。 – 4ndrew 2012-01-10 21:47:30

+0

另外,我可以指出,你確實在檢查比所需更多的碰撞,但只有2次。例如,要檢查圓A,B和C之間的衝突,您正在檢查AB,AC,BA,BC,CA,CB,而您只需檢查AB,AC和BC。減少檢查有更復雜的方法。這是一個廣闊的研究領域。 – mshang 2012-01-10 21:49:35

回答

4

你不能僅僅改變物體的移動方向,因爲碰撞幾乎可能發生在物體的後面,在這種情況下,反轉會再次發生碰撞過程中與物體碰撞的物體。這解釋了你看到的抖動。你需要考慮碰撞發生的方向,並相應地調整你的方向矢量,使用物理學中稱爲「彈性碰撞」的相關物理公式。

在這裏,看看這個:http://en.wikipedia.org/wiki/Elastic_collision

+0

哦!我不能相信我錯過了這一點。謝謝,邁克。 – Check12 2012-01-10 22:33:11

+0

很高興有幫助。另一個開心的顧客 – 2012-01-10 22:36:59

相關問題