我正在尝试创建一个简单的弹力球模拟器,我希望球以与现实生活中大致相同的速度移动。然而,目前,在从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的值是暂时的,我可能稍后调整它,但它不应该对这个问题产生任何影响。非常感谢任何和所有的帮助。谢谢!
答案 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
,看看是否能解决问题。