我正在用 JavaScript 做一个小小的 N-Body 模拟。它按照我的预期运行,但我注意到一些奇怪的事情。模拟使用 verlet 积分器,累积力的函数具有以下行:
force.length = (this.gravity * pa.mass * pb.mass) / dist * dist;
正如我所说,模拟按预期工作,但代码不应该实际读取:
force.length = (this.gravity * pa.mass * pb.mass) / (dist * dist)
;
哪里的操作顺序对于距离的平方是正确的?当我以这种方式拥有它时,模拟就会爆炸。有点奇怪,错误的方式可以正常工作,或者似乎可以。任何人都知道问题是什么?完整的代码和运行示例在这里:
https://gist.github.com/arctwelve/ca5868f80d0b0cd5791e http://bl.ocks.org/arctwelve/ca5868f80d0b0cd5791e
TIA