2016-05-01 7 views
0

こんにちは、StackOverflowコミュニティ!私はサークルの衝突に関する問題に取り組んでいます。単純な言葉で言えば、すべての衝突は理想的な弾性です。ボールは対角線内を移動するだけです。だから、これはかなり簡単ですね。さて、以下に添付する私の現在のコードで何らかの理由で、ボールが衝突するのではなく、お互いに「スティック」します。私は何が起こっているのかというと、彼らは絶え間なく "速度を交換している"ということです。それで彼らは分かれないのですが、私は間違っているかもしれません。2D Circle-Circle Collision Strange Behavior

+0

これはC++とどのように関連していますか? – kennytm

+0

@kennytmとほとんど同じ構文ですが、なぜ最初のタグとしてそれを置くのか分かりません...私はそれを削除すると思います。 – Micard

+0

速度を入れ替えるだけで、運動量基準フレームの中心で作業していない限り、非物理的な動きになります。 –

答えて

1

私は次の移動後に、それらの間の距離を予測し、現在の距離と比較することにより、それらが互いに離間又は向かって移動しているかどうかを確認するif dist <= (2 * radius)後に別if条件を追加し、[コードを削除します] 。私は(と私はそれを行うために、より広く使われている方法を考える)間の内積を計算するだろう...右

+0

私はちょっと考えていますが、どうすれば実装できますか?例を書くのが気にならないならば:) – Micard

+0

私の答えを更新しました。それがうまくいくことを願って... – Jefinthejam

+0

あなたはカッコを右に持っていませんでしたが、はい、それは動作します、彼らはまだ少し重なりますが、私はそれを修正することができます!どうもありがとうございます! – Micard

1

Jefinthejamの答えの代わりに、すべての括弧を持って期待し

dist_next = sqrt(((x(i)+velocity_x(i)) - (x(j)+velocity_x(j))^2 + ((y(i)+velocity_y(i)) - (y(j)+velocity_y(j)))^2); 

if dist_next < dist 
... 
end 

2つの速度ベクトルとその符号を調べる。

負の値の場合、オブジェクトは互いに離れているので、衝突には安全に応答できません。 フレームごとに何回もテストを実行する必要がある場合、このドット積を計算することは、平方根よりも安価です。