球在不切实际地快速反弹

Eev*_*vee 1 math processing gravity

我正在尝试创建一个简单的弹力球模拟器,我希望球以与现实生活中大致相同的速度移动.然而,目前,在从5英尺处跌落后,球几乎立即撞到地面并反弹几次然后停在一秒之内.我知道我可以尝试我的重力值直到它是半现实的,但我很困惑为什么我当前的重力值不起作用.这是我如何获得当前的一个:

现实生活中的重力= 9.8米/秒^ 2

= 32.152英尺/秒^ 2

= 1/72英尺/ 1/30秒^ 2(我的程序中我的帧率设置为30)

=每1/30秒^ 102.887像素^ 2(我的程序中一英尺是96像素)

这是我移动球的代码(使用Processing 3.2.1):

void move() {
  dy+=102.88704; //gravity
  x+=dx;
  y+=dy;
  z+=dz;
  if(y+size*8>480) {
    dy*=-0.85;
  }
  y=constrain(y,-100000.0,480-(size*8));
}
Run Code Online (Sandbox Code Playgroud)

目前,x和z只保持在0.因为它从5英尺处掉落,当它达到480尺寸*8(尺寸以英寸为单位)时它会撞到地面.0.85的值是暂时的,我可能稍后调整它,但它不应该对这个问题产生任何影响.非常感谢任何和所有的帮助.谢谢!

Ror*_*ton 5

您的错误在于将测量值从几秒钟转换为1/30秒.请注意,单位是英尺/秒^ 2:即秒平方.因此,要将时间单位从秒转换为1/30秒,您还必须将1/30平方.因此

32.152 ft/sec^2
= 32.152/30^2 ft/(1/30 sec)^2
= 0.035724 ft/(1/30 sec)^2
= 0.035724 * 96 pixels/(1/30 sec)^2
= 3.4295 pixels/(1/30 sec)^2
Run Code Online (Sandbox Code Playgroud)

因此,尝试更换数量102.887043.4295,看看是否能解决问题.