AwayPhysics或物理引擎中是否存在随机因素?

时间:2012-06-15 10:12:17

标签: random game-physics physics-engine away3d

假设我扔了一个立方体,它以45度,45度,0度旋转落在地面上(在它的角落)。现在处于一个“完美”的世界,立方体不会由原子组成,它将是“完美的”,没有风(或任何较小的空气运动)等。最后立方体将留在它上面角。但是我们并没有生活在这样一个无聊的“完美”世界中,物理模拟器应该考虑到这一点并且它们做得非常好。所以立方体就落在了它身边。

现在我的问题是,这是多么随机?立方体总是落在它的左侧吗?或者它可能取决于Math.random()?或者它可能取决于当前时间?或者它可能取决于一些自定义随机函数,它不需要时间,而是舞台上对象的参数,因为它是种子?

为什么我提出这个问题,如果随机性不是基于时间,我可能会缓存碰撞的结果(当对象停止时)为他们的特定初始位置优化我的动画?如果我缓存整个动画,我不在乎,但如果我只缓存了最终结果,我可能会惊讶于两个完全相同的情况可以评估到不同的结果,然后另一个不适合我的缓存版本。

我可以检查Math.random函数的来源,但这是一个浅层方法,因为代码肯定是优化的,因为那里不需要复杂的随机化,我个人会使用像fallLeft = time这样的东西%2。此外,代码可能会随着时间而变化。

在这里找不到关于AwayPhysics的任何信息,所以可能这对每个人来说都是新的东西 - 这就是我添加括号部分的原因;如果我假设一件事,世界将不会爆炸,而在AwayPhysics中它恰好相反,只是标准是什么?

1 个答案:

答案 0 :(得分:4)

我个人而言,不要使用预先制作的物理引擎。相反,当我想要一个时,我自己写,所以我知道它们是如何在里面工作的。多维数据集翻倒的原因是因为物理引擎不准确。它只能近似三角函数,平方根,积分等等,所以相反它会将它们估计为几位精度(Javascript中为15)。如果你有两个完美的圆圈堆叠在一起的情况下,它们之间的角度(pi / 2)将根据程序接近pi的方式慢慢变为一些看似随机的值。最终,这个微小的错误会随着圆圈相互滚动而增长,而顶部的错误会随之下降。因此,在回答你的问题时,如果以同样的方式抛出,立方体应该以相同的方式落下,但它总是落下的方向将是有效的随机。