我试图扩展他们的二进制行星模拟演示试图GlowScript
。当然,我想将问题扩展到第三(或更多)行星。在这个过程中,我将对主循环中各个变量的引用移动到数组中的引用。因此,当循环运行时,动画将不会进展。
这是前面的代码(动画作品):
while (true) {
rate(200,wait)
var dist = dwarf.pos - giant.pos
var force = G * giant.mass * dwarf.mass * dist / pow(mag(dist),3)
giant.p = giant.p + force*dt
dwarf.p = dwarf.p - force*dt
var stars = [giant, dwarf]
for (var _star in stars) {
var star = stars[_star]
star.pos = star.pos + (star.p/star.mass) * dt
}
}
和后代码(动画不起作用):
var stars = [giant,dwarf,moon]
while (true) {
rate(200,wait)
for(var i=0; i<stars.lenght; i++)
{
for(var j=i+1; j<stars.length; j++)
{
var dist = stars[i].pos - stars[j].pos
var force = G*stars[i].mass*stars[j].mass*dist/pow(mag(dist),3)
stars[i].p = stars[i].p + force*dt
stars[j].p = stars[j].p - force*dt
}
stars[i].pos = stars[i].pos + (stars[i].p/stars[i].mass) * dt
}
time += dt
}
在更新stars[i]
时,我可以判断它最好不会更新相应的sphere
对象。也许有人可以帮我修复代码。
Program Source Link您可以在其中查看来源并运行它。