3

我正在为我的科学展览项目构建一个 N 体问题的计算机模拟。我希望模拟/代码在完成后播放,以便路过的其他人可以不断查看它。我正在使用VPythonwhich 可以很好地进行模拟,但我无法找到一种方法让所有对象在重新启动整个代码时回到初始位置。我的循环正在使用:

finished = False
while not finished:
    rate(100)

然后当某些事情发生时,我使用 if 语句来进行模拟的下一部分,例如:更多星星

if time >= 4.5:  #Millions of Years
   F = G*(m1*m2)*r/r**3

有没有人知道如何让整个代码重复它自己?我能想到的最好的方法是将所有对象放入循环中,然后使用 continue,但我不完全知道如何使用 continue 和 break。

4

4 回答 4

1

你的问题对我来说并不完全清楚,但如果你问的是如何break工作continue,这可能有助于澄清一点:

while True:
    # do_some_stuff
    if calculation_finished:
        break     # exit from the innermost loop
    elif iteration_finished:
        continue  # abort the current iteration and go to the start of the loop
    else:
        # do_some_more_stuff
# This is where we land after the break statement.
# If there's nothing here, the program will exit.
于 2013-03-07T06:53:35.833 回答
1

如果确实需要,您可以使用其中一种os.exec*方法从头开始重新执行程序,但是您想要做的最好通过重构代码来完成,以便您可以将所有参数重置为一些最初指定的常量。如果不看更多代码,很难准确地说出如何重构它。

于 2013-03-07T07:02:16.637 回答
1

你的问题不清楚。不过,我相信您的问题是 N >= 3 的 N 体问题的轨迹是混乱的。并且您想重复相同的轨迹或反转时间并再次倒退。如果这是您的问题,那么除了只模拟一次轨迹(使用您的任何方法)之外别无他法。在模拟时,您显示并记录它。在这个模拟运行之后,你可以对你记录的轨迹做任何你想做的事情(再次播放,向后播放,...)

于 2013-03-07T08:04:48.890 回答
0

前任:

restPos = (x,y,z)

while True:
    if Star1.pos = resetPos:
        #reset star positions, EX below
        star1.pos = (0,0,0)
    else:
        F = G*m1*m2*r/r**3
        Star1.pos += F*dt #or however i did this, haven't used the code in a bit
于 2013-06-15T03:09:38.827 回答