私は andorid の Java でビリヤード ゲームを開発しています。ボールをそれらの間で衝突させようとすると問題が発生します。すべてのボールの質量と半径は同じです。衝突前の各ボールの位置と速度 (x、y) を知っており、衝突後の各ボールの速度を知る必要があります。
誰かがそれらを計算するためのアルゴリズムまたは式を教えてもらえますか?
答えは、実際にはコンピュータ サイエンスではなく、物理学 (衝突力学) に属します。
衝突には主に、弾性と非弾性の 2 種類があります。現実世界のシナリオをシミュレートするには、非弾性ルールを実装する必要があります。ただし、それらはより複雑で、粒子の質量と速度以外にいくつかの変数が関係しています。したがって、弾性衝突から始めることをお勧めします。
解(弾性) : ここでは、運動量保存と運動エネルギー保存の2 つの規則が常に成り立ちます。u1,u2 が質量 m1,m2 のボールの初期速度であり、それらの最終速度が V1,V2 であるとします。
m 1 u 1 + m 2 u 2 = m 1 V 1 + m 2 V 2
m 1 u 1 2 + m 2 u 2 2 = m 1 V 1 2 + m 2 V 2 2
既知の値m 1、u 1、m 2、u 2から上記の方程式を解くと、 V 1とV 2が得られます。
ゲームの円衝突アルゴリズムについては、次のリンクを使用しました。私にとってはうまくいきました。 https://sites.google.com/site/t3hprogrammer/research/circle-circle-collision-tutorial