普通の衝突ならできるのですが、角度を持った衝突をした場合の速度と向きの変化が分かりません。
どうすればよいのでしょうか?
※普通の衝突の場合のソースです。
sub_x:計算に使う値の保存用
sub_y:計算に使う値の保存用
X_pos:X座標
Y_pos:Y座標
speedX:X座標の移動速度
speedY:Y座標の移動速度
mass:球の質量
r:球の半径
BoundingCircle:球の当たり判定関数(当たった時に1を返す)
// 円の移動
for(i=0; i<2; i++){
en[i].X_pos += en[i].speedX;
en[i].Y_pos += en[i].speedY;
}
//// 円の当たり判定
if(1 == BoundingCircle(en[0].X_pos, en[0].Y_pos, en[0].r, en[1].X_pos, en[1].Y_pos, en[1].r)){
// 値の保存
sub_x = en[0].speedX;
sub_y = en[0].speedY;
// 当たった時の挙動
en[0].speedX = ( ((en[0].mass - (e * en[1].mass)) * en[0].speedX) + ((1 + e) * en[1].mass * en[1].speedX) ) / (en[0].mass + en[1].mass);
en[0].speedY = ( ((en[0].mass - (e * en[1].mass)) * en[0].speedY) + ((1 + e) * en[1].mass * en[1].speedY) ) / (en[0].mass + en[1].mass);
en[1].speedX = ( ((en[1].mass - (e * en[0].mass)) * en[1].speedX) + ((1 + e) * en[0].mass * sub_x) ) / (en[0].mass + en[1].mass);
en[1].speedY = ( ((en[1].mass - (e * en[0].mass)) * en[1].speedY) + ((1 + e) * en[0].mass * sub_y) ) / (en[0].mass + en[1].mass);
}