gpt4 book ai didi

c++ - Bullet Physics中HelloWorld例子的结果不符合自由落体定律?

转载 作者:行者123 更新时间:2023-11-30 03:31:50 42 4
gpt4 key购买 nike

我认为 Bullet Physics 的 HelloWorld.cpp 给出了一个自由落体的例子。

为了检查 Bullet Physics 的结果是否符合物理定律,在 HelloWorld.cpp 中,我将球体的初始位置从 "startTransform.setOrigin(btVector3(2, 10, 0));"更改为到“startTransform.setOrigin(btVector3(2, 0, 0));”,我将模拟步骤从“//dynamicsWorld->stepSimulation(1.f/60.f, 10);”更改为到“dynamicsWorld->stepSimulation(0.1f, 0, 0.1f);”

我认为,在这两个变化之后,输出将是球体在自由落体运动中的位置,间隔为 0.1 秒。我还在每个模拟步骤输出球体的线速度。结果是: vx, vy, yz, px, py, pz

第一行是初始线速度和位置。我们可以发现,速度符合自由落体定律(即v = g * t),但位置(位移)不符合自由落体定律(即s = g * t * t/2).

所以,我想知道 Bullet Physics 是否可靠?还是我弄错了什么?

谢谢!

最佳答案

我对 Bullet 了解不多,但也许我可以提供一些关于物理引擎的一般信息。

物理引擎本质上是数值积分器。它们不会对运动方程产生精确的解析解,而是对每个时间步长的速度进行数值求和以生成位置。 (并在数值上总结加速度/力以产生速度等)。

从您找到的数字来看,Bullet Physics 似乎正在使用 Euler Method用于计算积分。这是计算积分的最不准确的方法之一,但它也是最容易理解和计算的方法之一。

速度准确,因为加速度恒定,但位置不准确,因为速度不恒定。

Bullet Physics 并非不可靠或错误,它只是使用了一个不是特别准确的近似值;大概是为了在复杂场景中具有计算实时结果的性能。

关于c++ - Bullet Physics中HelloWorld例子的结果不符合自由落体定律?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43883478/

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