ページ 11

ボールとボールの衝突判定について

Posted: 2012年5月29日(火) 11:35
by fey
向きや速度と質量を持っている球同士が衝突した時、その後の向きと速度の求め方が分かりません。
普通の衝突ならできるのですが、角度を持った衝突をした場合の速度と向きの変化が分かりません。
どうすればよいのでしょうか?

※普通の衝突の場合のソースです。
 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);
	}


Re: ボールとボールの衝突判定について

Posted: 2012年5月29日(火) 11:41
by softya(ソフト屋)
とりあえず参考です。
「円の衝突の計算 - 物理学 - 教えて!goo」
http://oshiete.goo.ne.jp/qa/3544027.html

Re: ボールとボールの衝突判定について

Posted: 2012年5月29日(火) 17:01
by ISLe
ボールが任意の角度の壁と衝突したあとの進行方向の求め方は分かりますか?

ボールとボールの衝突はボールの中心同士を結んだ線分と垂直に交わる壁に衝突したと考えることができます。
わたしのブログに壁とボールの衝突をシンプルに実装した記事を投稿してるんですけど参考になるかもしれません。
記事へのリンクを貼るとフォーラムルールに抵触するおそれがあるので、投稿の見出しのURLがブログへのリンクなのでそこから辿ってください。