2012-03-27 107 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