计算弹跳球的度数

时间:2013-03-30 21:44:33

标签: java android

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

是否有一种简单的方法来计算或反映球的向上移动角度的值?提供一些帮助因为我不擅长数学!谢谢!

编辑: 我这样移动球:

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

2 个答案:

答案 0 :(得分:4)

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

  1. 确定您的角度测量系统。你告诉我一个向上移动的球是180°的角度,所以我猜指向下方,角度以逆时针方向增加(90°指向对等等)。保持一致非常重要。让d成为该系统中球的运动角度。

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

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

    o = 2*n - d - 180°

    请注意,您可能必须对此角度进行标准化,即您在360°之前添加/减去0° <= o < 360°

  4. d = 190°, n = 0°的示例:

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

    正常化后,这将导致o = 350°,如预期的那样。

答案 1 :(得分:0)

这很容易。当球弹跳水平面时,只需改变它垂直速度的标志。而当它击中垂直墙的垂直速度变化标志。我希望你有速度和坐标作为2D矢量(一对水平和垂直分量),如x,y作为球坐标和vX,vY作为球速。

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