人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

プログラマの方に質問です。

《目的》
衝突シミュレーションプログラムを組みたいです。
・長方形内に球を任意個数を生成し、それぞれに方向と速度を持たせる
・とある時間が経過した後の位置を計算する
(ビリヤードシミュレーションのようなプログラムを想定)

《思考途中の案》
1)経過時間後の球のベクトルを計算し、ベクトルをリストに登録
2)どれか一つのベクトル(Aとする)を選ぶ
3)ベクトルAと最初に交わる他のベクトル(Bとする)を調べる、交わらないならば2へ
4)Bのベクトルが最初に交わるベクトルがAでないならばBをAに置き換え3へ
5)A、Bのベクトルの衝突後のベクトルを計算し、ベクトルリストに登録する
6)交わるベクトルが無くなるまで2へ

《問題点》
球の個数が少ないうちは総当り的なロジックでも良いが、多くなると計算量が増えて重くなる(万単位)。


そこで、参考になる効率の良いアルゴリズムはないでしょうか?
実装しているサンプルなどありましたら、教えてください。

また、このような問題についてマルチスレッドで処理する方法などありますか?

C、C++、C#、Javaのサンプルですと嬉しいです。
よろしくお願いいたします。

●質問者: 姉本
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:C# C++ Java とある アルゴリズム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●28ポイント

こちらの「ボールの衝突運動のシミュレーション 」が参考になるかと思います。

アルゴリズムの考え方と、C++のサンプルコードが公開されています。

http://www.asahi-net.or.jp/~UC3K-YMD/Sketch/sketch.html

◎質問者からの返答

ある程度参考になりました。

しかしサンプルのソースでは、単位時間内で複数回の衝突は計算しない事になっているようです。


引き続き、良いサンプルやアルゴリズムがありましたら教えてください。

ご解答ありがとうございました。


2 ● ita
●42ポイント

この問題は hard sphere とよばれ計算物理の分野で50年の歴史があります。

メトロポリスアルゴリズムを最初に適用された問題でもあります。

まずはアルゴリズムを「イベントドリブン」にして、コメントにもあるようにセル構造を使うのが定石です。

以下に解説とコードがあります。

http://idav.ucdavis.edu/~okreylos/ResDev/Balls/index.html

◎質問者からの返答

英語の文章は読むのに少々時間がかかりそうです。

また、コメントもありがとうございます。

じっくり読ませていただきます。

ご解答ありがとうございました。


3 ● fgfg888
●10ポイント

http://www.asahi-net.or.jp/~UC3K-YMD/Sketch/sketch.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ