2011-02-04 244 views
1

我正在爲Java手機編寫彈跳球遊戲。除了碰撞和恢復係數的小問題之外,一切似乎都很好。Java彈跳球遊戲 - 滾球場景

當一個球碰到一個表面時,計算該表面的矢量法線(nx和ny),並且該球的矢量方向(dx和dy)反映在該法線矢量中。

此刻,我使用0.9作爲恢復係數,因此將dx和dy乘以這個值顯然太簡單了,因爲它沒有正確地模擬滾動。

是否有一個簡單的公式可以更準確地計算新的dx和dy,以便如果球在碰撞時幾乎平行於斜坡行進,則會比垂直碰撞時的速度損失更少。

不會發布任何我的代碼,我遠離我的電腦,所以可以稍後發佈,如果這有助於任何人的理解道歉。

感謝您提前提供任何幫助。

+1

我不確定這是最好的地方問這個。我相信有一些數學/物理堆棧交換。 – 2011-02-04 13:25:07

+0

可能是GameDev SE? – 2011-02-04 15:12:17

回答

2

恢復係數與碰撞物體的相對彈性有關。這是一種簡單的方法來說明球和表面在撞擊時都會變形。一些變形能量丟失了(例如,產生的熱量,聲波等),但其中大部分能量回到「推動」另一個身體。

如果恢復係數等於1.0,則沒有能量損失。把它看作是一個「模糊因素」,所以你不必做動態彈性問題。

滾動是另一回事。

我認爲恢復係數只能應用於速度的法向分量。如果你想更接近真實的物理,摩擦和滑動必須適用於切向分量。

您還需要另外一個方程,而不僅僅是x,y方向上的位移。您將需要另一個關於圍繞球的質心的z軸的扭矩。

牛頓的運動方程會將x和y方向的力以及圍繞z軸的力矩相加。

0

我可能是錯的,但解決這個問題的方法是計算球的角度,意思是artan(dy/dx)。

有了這個角度參考你的原點,你可以乘以這個角度的餘弦。如果它是完全平行的,速度將保持不變,如果是完全垂直的,速度將爲零。

您必須對此進行解釋以確保您希望球有最小和最大速度反彈。

希望它有幫助!