【发布时间】:2011-06-22 20:19:40
【问题描述】:
我正在努力理解这些集成方法,但我完全糊涂了。
代码如下:
public void update_euler(float timeDelta){
vPos.y += vVelocity.y * timeDelta;
vVelocity.y += gravity.y * timeDelta;
}
public void update_nsv(float timeDelta){
vVelocity.y += gravity.y*timeDelta;
vPos.y += vVelocity.y * timeDelta;
}
public void onDrawFrame(GL10 gl) {
currentTime = System.currentTimeMillis();
float timeDelta = currentTime - startTime;
startTime = currentTime;
timeDelta *= 1.0f/1000;;
// update_RK4(timeDelta);
// update_nsv(timeDelta);
// update_euler(timeDelta);
// update_velocity_verlet(timeDelta);
}
首先,我只是想确保我做对了这些。
我正在模拟一个完全弹性的球弹跳,所以在弹跳时我只是反转速度。
欧拉方法,球每次反弹时反弹得更高。这是由于我的代码中的错误还是由于方法的不准确。我读过欧拉积分你会随着时间的推移失去能量。好吧,我正在获得它,但我不知道为什么。
nsv 方法:我不太明白这与 Eular 方法有何不同,但无论如何,球在每次反弹时反弹得更低。它正在失去能量,我读过这并不意味着 nsv 方法会发生这种情况。为什么我会失去能量?
(velocity verlet 和 RK4 方法按我的预期工作)。
我觉得我缺乏关于这个主题的基本信息,但我不知道是什么。
我确实意识到我的时间步长不足,更新它以使用静态时间步长运行物理会阻止我失去/获得能量,但我试图了解发生了什么。
任何帮助将不胜感激。
【问题讨论】:
标签: math language-agnostic physics game-physics