我有這個簡單的歐拉集成商。爲了找到精確的碰撞時間,它也應該處理負的dt(我將幀時間分開,並在檢測到碰撞時模擬回來)。簡單的歐拉物理,奇怪的行爲
出於某種原因
someBody.update(1.0);
someBody.update(-0.3);
someBody.update(-0.3);
someBody.update(0.6);
給出比不同的結果:
someBody.update(1.0);
這可能是因爲我用歐拉,而不是RK4或verlet的?
下面的代碼爲積分:
void Body::update(double dt)
{
if (dt > 0) velocity += acceleration * (dt*dt);
else velocity -= acceleration * (dt*dt);
pos += velocity * dt;
rotation += angularVelocity * dt;
}
非常感謝!
馬騰
爲什麼'velocity + = acceleration *(dt * dt);'? $ v =不是$? –
請檢查'someBody.update(1.0);'是否會產生與'someBody.update(0.5)相同的值; someBody.update(0.5);'我不認爲你現在的公式做得對。還要檢查在x = 0,v = 0,a = 1時,在someBody.update(1.0)之後;'你會在x = 0.5,v = 1。 – Sjoerd