【问题标题】:Random angles of a bouncing ball弹跳球的随机角度
【发布时间】:2013-07-26 15:27:41
【问题描述】:

我正在尝试让球在窗户周围弹跳。取决于球撞击墙壁的距离和角度将决定它的反射。您可以在图片中看到黑色轨迹撞击内半部的对面墙壁......而灰色轨迹表示它是否要反射并撞击另一半......这会减小反射角度。

我不确定我的想法是否正确...我正在尝试以度数表示坐标。

因此,鉴于图片...您将获取这些增量,然后获得度数...

degree = Math.atan2(相反/相邻) = (-4/-2)

我的代码

public class Calculate {

public Calculate() {
    System.out.println(getCalc(7,5,4,0));       
}

public double getCalc(int x1, int x2, int y1, int y2) {
    double deltaX = Math.abs(x2-x1);
    double deltaY = Math.abs(y2-y1);
    double degrees = Math.toDegrees((java.lang.Math.atan2(deltaX, deltaY)));

    return degrees;
}

}

给出输出:26.56505117707799

所以现在我知道球会以 26 度角从墙壁反射(因为那是入射角)。但我不希望球一定会从每面墙上均匀反射,这样会增加可变性。

我的问题:

  • 我是否正确计算了球的角度?
  • 如何根据反弹在墙上的位置为反弹添加可变性?
  • 获得以度为单位的角度后,如何将其转换回坐标?

谢谢!

【问题讨论】:

    标签: java angle


    【解决方案1】:

    我是否正确计算了球的角度?

    您的绘图未按比例绘制。 26 度是从垂直于墙壁的直线测量的。

    如何根据弹跳在墙上的位置为弹跳添加可变性?

    您已经建议了一个随机角度。您还可以根据与墙中心的距离调整反射角度。

    将您的反射角度计算放入自己的方法中。您可以调整计算,直到您的计算为您提供所需的“随机性”。

    一旦我得到了以度为单位的角度,如何将其转换回坐标?

    将度数转换为弧度,然后计算SAS of the triangle。只需在模型中保留您的角度为弧度,然后在您的显示/诊断方法中转换为度数。

    【讨论】:

    • 感谢吉尔伯特的回复。我更新了我上面的图……对吗?
    • @Growler:是的,theta 是你计算的角度。
    • 我的意思是,一旦我有了度数的角度......我正在寻找如何获得表示该角度的新增量值(不一定是您的链接使用 SAS 显示的边)。如.. x 和 y 增量的 x += newVal; 和 y += newVal 中的 newVal 是什么?
    • 对那个吉尔伯特有什么想法吗?
    • @Growler:我不想和你争论。在您的图表中,您将 theta 计算为入射角。通过您选择的某种方法,您可以计算反射角的新 theta。您现在有一条边(垂直线)、一个角度(新的 theta)和一条边(传出路径,与传入路径的长度相同)。在我看来,这就像一个 SAS 计算。
    【解决方案2】:

    我认为球与表面的距离对角度并没有真正的影响。球离开表面之前的角度应该是相同的(镜面反射)。

    您可以通过思考橡皮球会发生什么来添加一些可变性,因为它会根据力等在撞击时发生一些变化,因此每次的反射并不完全相同。您可以简单地随机添加或删除一两个学位,然后看看效果如何。

    一旦你有了一个角度,它就会再次归结为三角学。您有一个角度,并且您知道斜边(我假设取决于您的帧速率和球速,球会从表面行进一定量)。因此,您需要从中获取三角形的相邻线和相反线。

    例如:

    sin(angle) * hypothenuse = opposite (so Y offset from the surface).

    cos(angle) * hypothenuse = adjacent (so X offset from the point of contact).

    只需从接触点的坐标中添加或删除(取决于方向)相邻和相反的值。

    【讨论】:

      【解决方案3】:

      如果你想让它看起来有点随机,你可以对旋转进行一些建模——它不必太复杂。

      如果它没有旋转并以 45 度角撞到墙上,它就会使球旋转。当它撞到下一堵墙时,旋转会增加角度,旋转会增加(或减少)角度。我认为旋转/角度组合也会影响它从墙上掉下来的速度(只是想象现实生活中的情况)

      这会使它在没有真正随机的情况下发生变化——但我不知道它实际上会如何——你可能必须应用其他限制(我认为必须有一种方法来限制最大旋转) .

      我敢打赌,如果您不只是想制定规则,那么有一本简单的物理学书可以提供足够的模型来模拟这个,而无需深入研究数学。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-18
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-25
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多