【问题标题】:Calculating the angle on a bouncing back ball计算反弹球的角度
【发布时间】:2016-03-28 00:55:50
【问题描述】:

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

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

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

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

感谢您的帮助。

【问题讨论】:

  • 如果墙壁都是垂直或水平的,您可以反转 x 或 y 速度,具体取决于您撞到的墙壁。
  • 它们都是垂直和水平的。我试图找出的计算是,如果球移动 315 度,并在水平(90 度)墙上反弹,它应该反弹 275 度。
  • 我认为如果你使用向量数学,你会更轻松。您可以查看here 以获得很好的说明。
  • 我正在尝试使用 atan2,看看是否可以根据击中墙的哪一侧进行 4 种不同的计算,,,?
  • 我已回答a related question here。也许这对你有帮助。正如 Renard 所建议的那样,用矢量数学来表达事情会容易得多。你所需要的只是你正在碰撞的表面的法线向量。

标签: android game-physics trigonometry


【解决方案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 分量。如果您在设计游戏时选择了前者,我强烈建议您切换到组件,因为它使所有的数学运算变得更加容易,因为您最终还是会将所有内容都转换为组件。

请注意,此答案假设您仅在水平或垂直方向上完全反弹。

【讨论】:

    【解决方案2】:

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

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

    下面的链接是这个计算的可视化表示,它可以提供更好的洞察力 http://mathworld.wolfram.com/images/eps-gif/Reflection2_751.gif

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多