2012-09-02 108 views
1

我有一個簡單的java應用程序,用於測試4個牆壁的碰撞並關閉10個球的每一個......我的牆壁已經算出來了,但是圓形到圓形似乎不適合我。當我與節目的其餘部分一起運行這個片段時,我得到了10個非常不穩定的圈子(似乎與自己發生碰撞),並且它們的動作都不是很大。如果我把這個部分拿出來,我會得到10個圓滑的移動並碰撞4個牆壁的圓。有人能告訴我什麼可能導致這個問題?謝謝這個圓圈到圓圈的碰撞有什麼問題?

for (int j = 0; j < ballnum; ++j) { 
    for (int k = 0; k < ballnum; ++k) { 
     if (Math.sqrt((Math.pow(balls[j].givebackpoint().x - balls[k].givebackpoint().x, 2)) 
      + (Math.sqrt(Math.pow(balls[j].givebackpoint().y - balls[k].givebackpoint().y, 2)))) <= 2 * RADIUS) { 
      if (balls[j].givebackangle() >= 180) { 
       balls[j].setangle(balls[j].givebackangle()-180); 
             } 
      else{ 
       balls[j].setangle(360-balls[j].givebackangle()); 
       } 
      } 
     } 
    } 

回答

2

你正在檢查每個球對自己。

您需要跳過運行測試,當j == K的在你內心的頂部像這樣的線環:

if (j == k) 
    continue; 
+0

似乎仍然沒有解決它。我明白你在說什麼。我會繼續玩弄它,稍後回來...... – jmendegan

+0

你確定你的角度修改代碼是正確的嗎?我似乎無法弄清楚...... – Raceimaztion

+0

我不完全確定......它好像對我有用。但你怎麼去做呢?只是好奇 – jmendegan

2

除非我錯過了它,你似乎沒有跳過j == k。所以你是對的,他們正在與自己碰撞。