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的值是暂时的,我可能稍后调整它,但它不应该对这个问题产生任何影响.非常感谢任何和所有的帮助.谢谢!
您的错误在于将测量值从几秒钟转换为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.88704
与3.4295
,看看是否能解决问题.