说我现在在我的桌子旁边有一个对象,以及我正在处理的程序中的一个java对象。如果我要放下真实物体,它将以9.81米/秒的速度向下加速(忽略风阻),因此速度为9.81米/秒/秒,总体位置为( - )9.81米/秒/ s / s相对于它开始的地方。
现在如果我用我的java对象编写一个java程序来模拟这个,我就会这样做
public class HypotheticalObjectClass(){
double position = 0, velocity = 0;
tick(){
velocity += 9.81;
position += velocity;
}
}
这个程序是准确的,只要我每秒调用tick()一次,但如果它被调用多次,那么位置会因为微积分或其他因素而飙升......我打算有这个程序每秒多次勾选,所以我如何只给出瞬时值(如速度,位置,旋转等)来校正计算,如果不可能,我需要添加哪个系统才能使其成为可能?
很抱歉,如果这个问题已在本网站上解决,我不知道我是如何找到它的,谢谢你的帮助。
答案 0 :(得分:0)
您需要知道tick
来电之间的时差,然后才能根据它调整加速度和速度。
public class HypotheticalObjectClass(){
double position = 0, velocity = 0;
public void tick(double dt) {
velocity += 9.81 * dt;
position += velocity * dt;
}
}
如果加速位于units/s^2
且速度位于units/s
,则dt
是函数调用之间秒的时差。因此,如果您每秒拨打一次,则应将其称为obj.tick(1.0)
。然而,最好的想法是测量呼叫之间的时间,因为正如您所提到的,时差并不总是完全相同。
请注意,此方法非常不准确,但通常足够好。有关物理模拟的更多信息,请参阅:http://gafferongames.com/game-physics/integration-basics/