2012-03-27 59 views
2

我一直在研究一個遊戲,並且遇到了彈跳效果的一些問題。我在互聯網上搜索了不同的資源,但還沒有找到正確的方法。計算回彈球上的角度

我想知道是否有某種方法可以計算球撞牆後彈回的度數或角度。

Exampel,球是在一個特定的角度移動,我想知道如何計算的角度,當我彈

bollX += bollspeed*Math.cos(Math.toRadians(angle)); 
bollY += bollspeed*Math.sin(Math.toRadians(angel)); 

enter image description here

感謝您的幫助。

+3

角度=角度出 – Nanne 2012-03-27 13:19:23

+0

如果壁是所有垂直或水平的視覺表示,你可以只逆轉在x或y的速度,這取決於你打在哪個牆上。 – Derek 2012-03-27 13:35:09

+0

它們都是垂直和水平的。我試圖找出的計算是,如果球移動315度進行檢測並在水平(90度)壁上反彈,則它應該反彈回275度。 – 2012-03-27 13:54:49

回答

1

這個問題比你做得更簡單。你根本不需要擔心角度,只是從組件角度考慮角度。當球在垂直方向擊中某物時,其速度的x分量被翻轉。當球在水平面上碰到某物時,其速度的y分量被翻轉。

例如,僞碼,你的衝突處理可能是這個樣子:

if (hits on left or right side of brick) 
    ball.velocity.x = -ball.velocity.x; 
else if (hits on top or bottom side of brick) 
    ball.velocity.y = -ball.velocity.y; 
endif 

從你提供的代碼,我不能確切地告訴你,如果有某種速度分量是這樣的。爲了表示你的速度,你必須有一個角度和一個大小,或者一個x和y分量。如果您在設計遊戲時選擇了前者,我強烈建議切換到組件,因爲它會使得所有的數學計算變得更加容易,因爲您最終只會將所有內容都轉換爲組件。

請注意,這個答案假定你只是完全水平或垂直彈跳。

0

你應該知道單位法線向量「n」,它垂直向量與球接觸並反彈回來的邊緣線和(n· n) = 1。

如果說單位法線矢量Ñ和你的速度矢量v然後 您的新的速度矢量將是, v = v - 2 (V· N)N,其中粗體字符表示向量,「·」表示點積。

下面鏈路是該計算中,其可以提供更好的見解 http://mathworld.wolfram.com/images/eps-gif/Reflection2_751.gif