3

サイエンス フェアのプロジェクトで、N 体問題のコンピューター シミュレーションを構築しています。終了時にシミュレーション/コードを再生して、通り過ぎる他の人が常に見ることができるようにします。VPythonシミュレーションを作成するためにうまく機能したものを使用していますが、コード全体を再起動するときにすべてのオブジェクトを初期位置に戻す方法がわかりません。私のループは使用しています:

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

あなたの質問は不明です。それでも、あなたの問題は、Nボディの問題の軌跡がN> = 3の場合、混沌としていることにあると思います。そして、同じ軌跡を繰り返すか、時間を反転させて、再び逆戻りしたいと考えています。これが問題である場合は、軌跡を一度だけシミュレートする以外に方法はありません(任意の方法を使用して)。シミュレートしながら、それを表示および記録します。このシミュレーションの実行後、記録された軌跡を使って好きなことを行うことができます (もう一度再生する、逆方向に再生するなど)。

于 2013-03-07T08:04:48.890 に答える
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 に答える
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 に答える