球在不切实际地快速反弹

时间:2017-06-28 18:57:06

标签: math processing gravity

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

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

= 32.152英尺/秒^ 2

=每1/30秒^ 1.072英尺^ 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));
}

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

1 个答案:

答案 0 :(得分: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

请尝试将102.88704替换为3.4295,看看是否能解决问题。