« シミュレーション結果が毎回異なるのはなぜ? その5 | トップページ | ヒンジの衝撃耐性の単位は? »

2012年6月11日 (月)

再現性 衝突編

物体が衝突したときの処理の再現性があるかどうか調べてみる。

2物体のシーン

衝突というか埋め込み力のテストだな。埋め込み力によって速度が発生するのには2フレームかかるので、App.Stepを2回実行する。結果は100回すべてで左の円はvel = [-13.323809, 0.0]、右の円はvel = [13.323809, 0.0]となった。

では3物体のシーン

6パターンに分かれた。

右の円左の円上の円回数
[20.609371, -7.2699723][-20.609375, -7.2699728][-2.3209132e-06, 14.539947]18回
[20.609373, -7.2699733][-20.609373, -7.2699742][4.6021995e-07, 14.539946]16回
[20.609373, -7.2699733][-20.609375, -7.2699728][-7.4717161e-07, 14.539947]15回
[20.609373, -7.2699742][-20.609373, -7.2699733][-4.6021995e-07, 14.539946]18回
[20.609375, -7.2699728][-20.609371, -7.2699723][2.3209132e-06, 14.539947]15回
[20.609375, -7.2699728][-20.609373, -7.2699733][7.4717161e-07, 14.539947]18回

今回から実験手順を変えている。
以前は、
1 phnファイルを生成
2 phnファイルを引数としてPhunを起動
3 App.Stepを実行
4 ファイルをセーブ
5 2に戻る
の繰り返しであったのに対し、今回は
1 phnファイルを生成
2 phnファイルを引数としてPhunを起動
3 App.Stepを2回実行
4 ファイルをセーブ
5 PhunでUndo(Ctrl+Z)
6 4に戻る
としている。主目的は時間のかかるPhun起動を1回で済ますことによる実験時間の短縮であり、100回分の実験が50分から20分に短縮できた。しかしこれは同時に、不定性の原因がPhun起動時に発生しているか、シミュレーション開始時に発生しているかを調べていることにもなる。同一のシーンを実行するときにUndoしてやり直すと結果が変化するので、シミュレーション開始ボタンを押した瞬間に結果を不定にするようなことが起きているのではないだろうか。

多数のバネを1つの物体に接続すると再現性のない暴走をするのも、1フレーム中で複数の力がかかったときの処理順が不定であることが原因だと考えられる。処理順によっては、とても大きな速度が発生してしまうことがあるのだろう。

« シミュレーション結果が毎回異なるのはなぜ? その5 | トップページ | ヒンジの衝撃耐性の単位は? »

コメント

私の環境でも同様の結果が得られました。
(6種類の値は全く同じで、回数は上から順に18, 18, 15, 15, 18, 16回でした。)

今回のように「同じシーンの数ステップ目のデータを何回も保存する」という作業を楽に行えるツール(phnファイルとして使用します)を作成したので是非ご利用ください。
これを利用すると、4ステップ目のデータ1000回分を1分弱で保存できました。
https://dl.dropbox.com/u/9975638/Algodoo/scenes/repeat_save_tool.txt

コメントありがとうございます。
次に機会があったら使ってみます。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1499066/45617278

この記事へのトラックバック一覧です: 再現性 衝突編:

« シミュレーション結果が毎回異なるのはなぜ? その5 | トップページ | ヒンジの衝撃耐性の単位は? »