円同士の衝突後のめり込み補正の計算式を教えてください。

円同士の衝突時のめり込み補正のやり方・計算方法を教えてください

c++でビリヤードを作っています。
しかし、円同士が当たった時に何度も当たり判定を取らないように、円の位置を当たり判定が出ないところに移動させる計算式もしくは方法が分かりません。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

エラーメッセージ

### 該当のソースコード ```C++ //円の中心位置 float x1,y1; float x2,y2; //半径(二つの円の半径は同じ) int r = 5; //当たり判定 float x = x1 - x2; float y = y1 - y2; float length = x * x + y * y; sumR = (r + r) * (r + r); //当たった if(sumR > length) { angle = atan2( y, x); x1 += (r * cosf(angle)); y1 += (r * sinf(angle)); }

試したこと

上記がネットで見つけた方法でしたが、これではうまくいきませんでした。
位置の補正はしますが円と円の間に大きな隙間(離れすぎる)ができてしまいます。

コメントを投稿

0 コメント