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

有没有简单的方法可以计算或反映球的向上移动角度的值?由于我数学不好,因此需要一些帮助!谢谢!

编辑:
我像这样移动球:

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

最佳答案

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

  • 决定您的角度测量系统。您告诉您,一个向上移动的球的角度为180°,所以我猜指向下方,并且该角度沿逆时针方向增加(90°指向右侧等)。保持一致很重要。令d为该系统中球的运动角度。
  • 定义边界法线向量的角度。如果顶部的边界是水平的,则其法线矢量垂直于该边界,并且具有角(在点1定义的测量系统中)。令n为该角度。垂直边框的格式为n = 90°
  • 球的出射角o由下式给出:
    o = 2*n - d - 180°
    请注意,您可能必须对此角度进行归一化,即将360°添加到o中/从o中减去0° <= o < 360°直到d = 190°, n = 0°

  • 您的示例o = 350°:
    o = 2*0° - 190° - 180° = -370°
    

    如预期的那样,这将在标准化后生成ojit_code。

    关于java - 计算弹跳球的度数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15723836/

    10-10 16:45