球弹得快得不切实际
Ball is bouncing unrealistically fast
我正在尝试创建一个简单的弹力球模拟器,我希望球以与现实生活中大致相同的速度移动。然而,目前,球从 5 英尺高处落下后,几乎是瞬间落地并反弹几次,然后在不到一秒钟内停下来。我知道我可以试验我的重力值直到它是半现实的,但我对为什么我当前的重力值不起作用感到困惑。这是我获得当前版本的方式:
现实生活中的重力=9.8m/sec^2
= 32.152 ft/sec^2
= 1.072 英尺每 1/30 秒^2(我的程序中的帧速率设置为 30)
= 102.887 像素每 1/30 秒^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-size*8(尺寸以英寸为单位)时会撞击地面。 0.85 值是临时值,稍后我可能会对其进行调整,但它应该不会对此问题产生任何影响。非常感谢任何帮助。谢谢!
您的错误在于将测量值从秒转换为 1/30 秒。注意单位是ft/sec^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
,看看能否解决问题。
我正在尝试创建一个简单的弹力球模拟器,我希望球以与现实生活中大致相同的速度移动。然而,目前,球从 5 英尺高处落下后,几乎是瞬间落地并反弹几次,然后在不到一秒钟内停下来。我知道我可以试验我的重力值直到它是半现实的,但我对为什么我当前的重力值不起作用感到困惑。这是我获得当前版本的方式:
现实生活中的重力=9.8m/sec^2
= 32.152 ft/sec^2
= 1.072 英尺每 1/30 秒^2(我的程序中的帧速率设置为 30)
= 102.887 像素每 1/30 秒^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-size*8(尺寸以英寸为单位)时会撞击地面。 0.85 值是临时值,稍后我可能会对其进行调整,但它应该不会对此问题产生任何影响。非常感谢任何帮助。谢谢!
您的错误在于将测量值从秒转换为 1/30 秒。注意单位是ft/sec^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
,看看能否解决问题。