gpt4 book ai didi

c++ - 简单的欧拉物理,奇怪的行为

转载 作者:行者123 更新时间:2023-11-28 01:04:58 25 4
gpt4 key购买 nike

我有这个简单的欧拉积分器。为了找到精确的碰撞时间,它还应该处理负 dt(我将帧时间分开并在检测到碰撞时进行模拟)。

出于某种原因

someBody.update(1.0);
someBody.update(-0.3);
someBody.update(-0.3);
someBody.update(0.6);

给出的结果不同于:

someBody.update(1.0);

可能是因为我用的是euler而不是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 变量:

如果你调用:

someBody.update(1.0)

你会得到:

速度 += 加速度 * 1

但是如果你调用:

someBody.update(1.0);
someBody.update(-0.3);
someBody.update(-0.3);
someBody.update(0.6);

你会得到:

速度 += 加速度 * (1 - 0.3^2 - 0.32^2 + 0.6^2)

(给出 速度 += 加速度 * 1.18)

你应该有简单的 velocity += acceleration * dt;

关于c++ - 简单的欧拉物理,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6726943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com