最も普通なODEはシミュレーションのタイプは以下の特性を持ちます.
このページではどのようにシミュレーションパートとグラフィックをどのように統合するかを説明します.
シミュレーションと可視化は相互作用的な処理です.繰り返しのために,シミュレーションはワールドの状態を更新し,その後この状態を可視化処理で描き出します.まず第一条件はあなたの最後のメインループの処理時間を測ることです.これは単精度・倍精度ともに共通の問題です.
単純なアプローチとしては,ODEのStep()関数を呼び出し,この間の時間を測ることです.これは2つの欠点を有しており,遅いCPU・グラフィックボードの場合,経過時間はシミュレーションが悪い結果を与える,大きすぎるタイムステップで実行することになるでしょう.さらに、測定された時間ステップは、非決定論的シミュレーションを引き起こし、実行ごとに変化する可能性があります.つまり,あなたはシミュレーションを実行するたびに、結果が異なることになります。
あるシミュレーションを取得するためには
以下のアプローチが推奨されます.
- リアルタイム(シミュレーションタイムと壁時計の時間がシンクロしている)
- グラフィックデバイスを用いて可視化される.
このページではどのようにシミュレーションパートとグラフィックをどのように統合するかを説明します.
シミュレーションと可視化は相互作用的な処理です.繰り返しのために,シミュレーションはワールドの状態を更新し,その後この状態を可視化処理で描き出します.まず第一条件はあなたの最後のメインループの処理時間を測ることです.これは単精度・倍精度ともに共通の問題です.
単純なアプローチとしては,ODEのStep()関数を呼び出し,この間の時間を測ることです.これは2つの欠点を有しており,遅いCPU・グラフィックボードの場合,経過時間はシミュレーションが悪い結果を与える,大きすぎるタイムステップで実行することになるでしょう.さらに、測定された時間ステップは、非決定論的シミュレーションを引き起こし、実行ごとに変化する可能性があります.つまり,あなたはシミュレーションを実行するたびに、結果が異なることになります。
あるシミュレーションを取得するためには
- 実行間の再現性
- リアルタイム性
- 可視化ステージでのスピードに影響を与えない
以下のアプローチが推奨されます.
- 固定されたタイムステップを選び,ODEのシミュレーションの間使用する.例えば1ms
- シミュレーション内のあなたが計測した経過時間dtのタイムステップを見てください.これはシミュレーションステップによって分けられたdtを丸めることで出来ます.たとえば,可視化する際,計測した時間が14.5msならあなたはシミュレーションステップを15msにすべきです.
- 経過時間がシミュレーションステップが必要なそれぞれのフレームで増え続ける状況を避けるために,dtの上限を決めて置く必要があります.でないと,低速のシステムはリアルタイムでないにも関わらず実行されます.
- 代わりに除算結果を切り上げ、あなたが次のフレームにシミュレーション時間の残りを選ぶことができることに注意してください。
コメントをかく