普遍万有引力定律 - 操作顺序

时间:2016-01-19 23:44:26

标签: javascript simulation physics verlet-integration

我正在使用JavaScript进行一些N-Body Simulation。它按照我的预期运行,但我注意到一些奇怪的事情。模拟使用一个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

2 个答案:

答案 0 :(得分:3)

在您的代码中,<int:channel-interceptor>实际上是将var dist = vect.x * vect.x + vect.y * vect.y;设置为距离的平方,因此dist应该会为您提供正确的结果。

答案 1 :(得分:2)

的解释
force.length = (this.gravity * pa.mass * pb.mass) / dist * dist;

force.length = ((this.gravity * pa.mass * pb.mass) / dist) * dist;

除法运算符和乘法运算符具有相同的运算符优先级,并且它们从左到右分组。因此,你的表达是有效的

force.length = this.gravity * pa.mass * pb.mass;

我想也许你对模拟应该如何运作的期望可能会消失。