2

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

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

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

我可以只检查 Math.random 函数的源代码,但这将是一种肤浅的方法,因为代码肯定已经过优化,并且那里不需要如此复杂的随机化,我个人会使用类似 fallLeft = time % 2 的东西。此外,代码可能会随着时间而改变。

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

4

1 回答 1

4

我个人不使用预制的物理引擎。相反,当我想要一个时,我自己写,所以我知道它们是如何工作的。立方体翻倒的原因是物理引擎不准确。它只能近似诸如三角函数、平方根、积分等之类的东西,因此它会将它们估计为几位数的准确度(在 Javascript 中为 15)。例如,如果你有两个完美的圆堆叠在一起的情况,它们之间的角度 (pi/2) 会根据程序逼近 pi 的方式慢慢变为一些看似随机的值。最终,随着圆圈彼此滚开,这个微小的错误会越来越大,而最上面的那个会掉下来。因此,在回答您的问题时,如果以相同的方式抛出立方体,则每次应该以相同的方式下落,

于 2012-07-01T07:31:44.680 回答