3

我正在做一个简单的突破游戏,我有一些问题如何计算球击中顶部边界时的角度。当球以 180 度角向上移动时,它会以 0 度角向下弹回。但是当球以 170 度的角度向上移动时,它应该以镜像的角度向下弹回,例如 10 度。我可以像180-170 = 10度数一样计算这个,但是如果球以 190 度的角度向上移动怎么办!?那么它应该以350度的角度向下弹回,但我不知道如何计算!?

有没有一种简单的方法来计算或反映球的向上移动角度的值?Preciate一些帮助,因为我的数学不好!谢谢!

编辑:我正在像这样移动球:

xPos += speed * Math.sin(Math.toRadians(direction));
yPos += speed * Math.cos(Math.toRadians(direction));
4

2 回答 2

4

要回答有关角度和反射的问题:

  1. 决定您的角度测量系统。你告诉过一个向上移动的球的角度为180°,所以我猜它是向下的,并且角度在逆时针方向增加(90°指向右侧等)。保持一致很重要。让d是该系统中球运动的角度。

  2. 定义边界法线向量的角度。如果顶部的边界是水平的,它的法向量垂直于它并且有一个角度(在点 1 中定义的测量系统中)。让我们n成为那个角度。垂直边框将具有n = 90°.

  3. 球的出射角o由下式给出:

    o = 2*n - d - 180°

    请注意,您可能必须规范化这个角度,即添加/减去360°o 直到0° <= o < 360°

你的例子d = 190°, n = 0°

o = 2*0° - 190° - 180° = -370°

正如预期的那样,这将导致o = 350°标准化后的结果。

于 2013-03-30T22:29:11.337 回答
0

这简单。当球在水平表面反弹时,只需改变其垂直速度的符号。并且当它撞到垂直墙壁时,垂直速度会发生变化。我希望你有速度和坐标作为 2D 向量(一对水平和垂直分量),比如 x,y 作为球坐标,vX, vY 作为球速。

也许这是一个好主意,当球击中砖块时,将它向后移动一步,就在击球之前,然后进行速度分量符号反转。

于 2014-02-08T11:02:57.767 回答