Android 计算反弹球的角度

Android 计算反弹球的角度,android,game-physics,trigonometry,Android,Game Physics,Trigonometry,我一直在做一个游戏,在弹跳效果方面遇到了一些问题。我在互联网上搜索了不同的资源,但没有找到正确的方法 我想知道是否有某种方法可以计算出球撞击墙壁后反弹的角度或度数 例如,球以特定的角度移动,我想知道当我弹起时如何计算角度 bollX += bollspeed*Math.cos(Math.toRadians(angle)); bollY += bollspeed*Math.sin(Math.toRadians(angel)); 谢谢你的帮助。这个问题比你要解决的要简单得多。实际上,你根本不需

我一直在做一个游戏,在弹跳效果方面遇到了一些问题。我在互联网上搜索了不同的资源,但没有找到正确的方法

我想知道是否有某种方法可以计算出球撞击墙壁后反弹的角度或度数

例如,球以特定的角度移动,我想知道当我弹起时如何计算角度

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


谢谢你的帮助。

这个问题比你要解决的要简单得多。实际上,你根本不需要担心角度,只需要考虑组件的角度。当球在垂直方向撞击某物时,其速度的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分量。如果你在设计游戏时选择了前者,我强烈建议你切换到组件,因为这会使整个过程中的数学计算变得更容易,因为你最终会把所有东西都转换成组件


注意,这个答案是假设你只在水平或垂直方向上弹跳。

你应该知道单位法向量“n”,它是垂直于触球和弹跳的边缘线的向量,并且(n·n)=1

如果你说单位法向量n和速度向量v,那么 你的新速度向量是, vnew=v-2(v·n)n,其中粗体字符表示向量,“·”表示点积

下面的链接是此计算的可视化表示,这可能会提供更好的洞察力

如果墙壁都是垂直或水平的,你可以根据你撞到的墙壁反转x或y速度。它们都是垂直和水平的。我试图找出的计算结果是,如果球移动315度,在水平(90度)墙上反弹,它应该反弹275度。我想如果你使用向量数学,你会更容易。你可以找一个很好的解释来解释它是如何完成的。我正在尝试atan2,看看我是否可以根据墙的哪一侧被击中进行4种不同的计算,,,,?我已经回答了。也许这对你有帮助。正如雷纳德所建议的那样,用向量数学来表达事情要容易得多。你所需要的只是碰撞表面的法向量。