2013-12-10 100 views
-1

這個問題是關於WPF的。wpf中兩個球的碰撞並得到碰撞球的路徑

我有兩個球,一個是靜態的,另一個是靜止球。在碰撞時,球將按照碰撞決定的方向移動,碰撞時他們將在哪個角度碰撞並相應移動。

我的問題基本上是爲什麼是最簡單和最有效的方式來衝突WPF中的對象,並在碰撞後給他們一個相應的移動路徑的建議。除了減速等,最好的策略應該應用於檢測碰撞並在碰撞後給球提供新的路徑。

+3

** Close-Voting:** *詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:堆棧溢出問題清單* –

+0

您對此非常真實,但我詢問了SUGGESTIONS,因爲它明確寫在我的描述中 – Affuu

+0

[Ball to Ball Collision - Detection and Handling](http:// stackoverflow。問題/ 345838 /球碰撞檢測和處理) –

回答

0

簡單地計算出2個球的中心的距離。

if (distance(ball1.Center, ball2.Center) <= ball1.Radius + ball2.Radius) 
{ 
    // collision 
} 

對於距離使用本:

double x = ball1.Center.X - ball2.Center.X; 
double y = ball1.Center.Y - ball2.Center.Y; 
double distance = Math.sqrt(x*x + y*y); // pythagoras 

爲了計算新的方向,你會需要一些更多的數學。看看像XNA一起交付的幾何圖書館。再次嘗試googeling你的問題,並使用XNA搜索而不是WPF - 這將解決你的問題,我猜。

+0

或者不要自己計算這個,只需寫'(ball1.Center - ball2.Center).Length'(來自[Vector](http://msdn.microsoft.com/en-us/library/) System.Windows.Vector.aspx))。 – Clemens

+0

的確如此。使用內置方法更好,更不易出錯。我多年沒有使用WPF,直到現在還不知道Vector類的存在。 如果它的工作方式與XNA的Vector類相似,那麼它就是滿足您所有需求的全面工具包。 :) – rulebot

+0

@rulebot我只限於WPF。 XNA現在不是一個選項。 – Affuu

0

我會計算它們之間的距離(pythagoras),如果距離小於添加的兩個半徑,就會發生碰撞。

檢查這裏點之間的角度: Math Calculation to retrieve angle between two points?

你可以檢查此一: Ball to Ball Collision - Detection and Handling

+0

我很感謝你的答案先生,但你能解釋一下嗎?我的意思是碰撞部分是好的,但你會如何建議我,我應該努力讓他們的碰撞發生後的路徑? – Affuu

+0

你讀過第二個鏈接了嗎?我認爲那裏有很好的解釋。 –

+0

是的。這非常有幫助。謝謝 – Affuu