メイン コーダーズルーム【スクリプト系】 事前にオブジェクト同士の衝突を判定 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
monoq | Åê¹ÆNo.33135 投稿日時: 2007-4-24 20:23 |
新米 居住地: 投稿: 13
使用環境:
Flash MX2004 10.4 |
Re: 事前にオブジェクト同士の衝突を判定 nabe_1234さん、こんにちは。
引用: nabe_1234さんは書きました: すいません。 環境としては一番最初の書き込みの流れなのですが、 nabe_1234さんがおっしゃる「t秒」というのがどの時点を さすのかが、分かりませんでした。 引用: 「もし今の弾道を過去に向かって延長したら過去の時点で衝突していた」ことを表します。 "衝突していた"という事実と、"衝突していた時間"も今回は欲しかったのです。 言葉足らずでもうしわけありません。 そして、nabe_1234さんの意図している事が、理解できていなければ すみません。。 |
nabe_1234 | Åê¹ÆNo.33142 投稿日時: 2007-4-24 23:09 |
新米 居住地: 投稿: 21
使用環境:
Windows Vista Home Premium SP1,Flash CS3 |
Re: 事前にオブジェクト同士の衝突を判定 あれぇ・・・おかしいなぁ・・・問題読み違えてるかも・・・
例として、半径1の円が2つあって、 それぞれ等速直線運動しているとします。 円Aの中心位置A(t)はt=0のときA0=(0,0)にあって、t=3のときA3=(3,3)に移動する予定です。 円Bの中心位置B(t)はt=0のときB0=(0,3)にあって、t=3のときB3=(3,0)に移動する予定です。 実際には両者は途中で衝突するので予定通りの位置には到達しません。 ここで、円の大きさを考えない(半径=0とする)なら、 2つの円は、t=1.5のとき、(1.5,1.5)で衝突します。 時刻tにおける円Aの中心の位置は、 A(t)=A0+t*(A3?A0)/3=(t,t) で表せます。 時刻tにおける円Bの中心の位置は、 B(t)=B0+t*(B3?B0)/3=(t,3?t) で表せます。 ここで、円AとBの中心の位置の差は、 B(t)?A(t)=(0,3?2*t) で表せます。 ここで、円AとBが接しているとき、 円AとBの中心の距離=Aの半径+Bの半径=2 となります。 ここで、円AとBが接する時刻を求めるため、 tの2次方程式 |B(t)?A(t)|^2=2^2 を考えます。 0^2+(3?2*t)^2=2^2 3?2*t=±2 t=0.5、2.5 この結果から、 ・円Aと円Bが衝突するのは、t=0.5のとき。 ・もし円AとBが衝突せずにすり抜けるとすると、 t=0.5?2.5の間、円の一部が重なっている。 ということになります。 実際、t=0.5のとき、 A(t)=(0.5,0.5) B(t)=(0.5,2.5) となり、両者の距離は2となり、 2つの円が丁度接触しています。 |
« 1 (2) |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |