2012-10-16 40 views
1

我有一個大圈和大約30小氣泡,將是最大的一個裏面。小氣泡不能離開大圓圈,當小氣泡與另一個氣泡相遇時,它們偏向相反的方向。界要碰撞對方,不工作

這是兩個小圓圈的偏轉代碼:

var xVelocityBubble1 = Math.random(); 
var yVelocityBubble1 = Math.random(); 

var xVelocityBubble2 = Math.random(); 
var yVelocityBubble2 = Math.random(); 

moveBubbles = function() { 
xbubble1 += xVelocityBubble1; 
ybubble1 += yVelocityBubble1; 

xbubble2 -= xVelocityBubble2; 
xbubble2 -= yVelocityBubble2; 

if (Math.sqrt(Math.pow(xbubble1 - xbubble2, 2) + Math.pow(ybubble1 - ybubble2, 2)) < radius * 2) { 
xVelocityBubble1 *= -1; 
yVelocityBubble1 *= -1; 
xVelocityBubble2 *= -1; 
yVelocityBubble2 *= -1; 
} 
} 

Bubbles inside a big Circle

現在,這裏的問題。正如你在這張照片上看到的那樣,有時候我的泡泡會碰撞,而我不知道爲什麼。一切都很好,直到一個圈子被撞毀,然後突然間越來越多的泡沫在戰爭中。看看圈子375,240,330和410.首先我認爲這可能與不同的速度有關,但這不是問題。有沒有人有任何想法?

+0

執行氣泡不斷改變方向?如果是,何時?如果看起來他們不這樣做可能是有用的,讓他們以不同的顏色顯示,以確保...所有的數學看起來都是正確的(除了可能改變 Sheena

回答

1

你的代碼假定圈發生碰撞,因爲它們朝着彼此,因此直動碰撞的反應將是兩個圓形反而完全相反。

對於正在朝着大致相同的方向圓會議中,該反應將是很奇怪。你應該計算圓圈相交的角度,並從中計算出它們交換的動量以及它們如何影響每個圓圈。

這是因爲不穩定的反應與圈做一個全面的計算,使他們進入對方一個以上的碰撞合併的可能。作爲一個圓圈,任何碰撞都會轉動180度,這意味着如果碰撞兩次(或任何偶數),它會繼續進行,就像沒有任何事情發生一樣。

+0

首先,我也想計算角度,但結果是非常困難,但有一個動量是一個很好的想法,而且可能會更好看,我希望這能解決我的問題。 – user1590534

0

在我看來就像一個半徑內的另一個變,你檢測碰撞,但後來,纔可以得到半徑之外,你再次檢測碰撞和方向再次反轉,在錯誤的道路。一旦一個圓圈在另一個圓圈內,這會導致兩個圓圈永遠振動。

0

我認爲你需要檢查碰撞,其檢測的時候,後面的泡沫遠離的東西它使沒有重疊相撞。現在你確實檢查碰撞,但是允許它們在此期間重疊,直到反向速度能夠解決這種情況。不應該有重疊。

0
var xVelocityBubble1 = Math.random(); 
var yVelocityBubble1 = Math.random(); 

var xVelocityBubble2 = Math.random(); 
var yVelocityBubble2 = Math.random(); 

moveBubbles = function() { 
xbubble1 += xVelocityBubble1; 
ybubble1 += yVelocityBubble1; 

xbubble2 -= xVelocityBubble2; 
xbubble2 -= yVelocityBubble2; 

if (Math.sqrt(Math.pow(xbubble1 - xbubble2, 2) + Math.pow(ybubble1 - ybubble2, 2)) < radius * 2) { 
xbubble1 -= xVelocityBubble1; 
ybubble1 -= yVelocityBubble1; 
xbubble2 += xVelocityBubble2; 
xbubble2 += yVelocityBubble2; 

xVelocityBubble1 *= -1; 
yVelocityBubble1 *= -1; 
xVelocityBubble2 *= -1; 
yVelocityBubble2 *= -1; 
} 
} 

您需要撤消引起衝突的行動,因爲離開氣泡處於一種非法狀態的

+0

謝謝,這聽起來很合邏輯。我會嘗試一下,但它需要一段時間,因爲這些圈子並不總是相互爭鬥;-) – user1590534

+0

它不工作:(一段時間後泡沫仍然互相爭鬥:( – user1590534

+0

@ user1590534:做泡沫有沒有改變方向?如果是的話,什麼時候?如果看起來他們不這樣做可能是有用的,讓他們出現在不同的顏色,以確保...所有的數學看起來是正確的(除了可能改變 Sheena