パーティクルの動きをシミュレートするコードを書いています。 (現在はすぐに3Dがうまくいけば2D) 事実は、私が比較的大きなタイムステップを使用すると、粒子がお互いに通過することになります。パーティクルがお互いを通過する
本当に小さなステップを使用せずに修正することをお勧めしますか? (これはC++で大きな違いがあります)。
パーティクルの動きをシミュレートするコードを書いています。 (現在はすぐに3Dがうまくいけば2D) 事実は、私が比較的大きなタイムステップを使用すると、粒子がお互いに通過することになります。パーティクルがお互いを通過する
本当に小さなステップを使用せずに修正することをお勧めしますか? (これはC++で大きな違いがあります)。
したがって、2つのオブジェクトが衝突するかどうかを確認するには、ある種のcollision detectionを実行する必要があります。
データ構造によっては、検出にさまざまな形があります。ポイントのリストを持っているだけの場合は、N^2でパーティクルごとにすべてのチェックを行う必要があります(より大きな空間的な足のプリントを作成するために動きベクトルを追加する)。これはアルゴリズムGJKによって行うことができます。
いくつかの空間データ構造を使用すると、剪定されたパーティクルセットでGJKを実行するだけで、複雑さを軽減できます。つまり、不可能かどうかを確認する必要はありません。
提案に感謝私はそれを実装することを知っており、費用がコストよりも重要かどうかを確認します:-) – john
use of timestep to advance the clock introduces model artifactsあなたのケースで起こっているように、モデルの妥当性を破壊する可能性があります。代わりに個別イベントスケジューリングを使用してください。このpaper from Winter Simulation Conference 2005は、離散イベントフレームワークでの動作の実装方法について説明しています。あなたのモデルはより正確であるだけでなく、おそらくより高速に動作します。
私はそれを実装することを知っており、費用がコストを上回っているかどうかを確認します:-) – john
最高のアプローチが何であるかを確認するためにコードを追加することを検討してください。 – sirandy