プロが教えるわが家の防犯対策術!

いつもお世話になっています。
2Dのエアホッケーゲームを作ろうとしています。
ホッケーの円盤(パック)がラケット(パドル)に衝突した後、跳ね返る方向と速度の求め方を教えてください。
例えば、
円盤、ラケットの形状は円で、
円盤の進行方向および速度が毎秒(d1, d2)
ラケットの進行方向および速度が毎秒(r1, r2)
衝突時の円盤の中心座標が(d3, d4)
衝突時のラケットの中心座標が(r3, r4)
の場合、衝突後の円盤の進行方向および速度である毎秒(x, y)を求めるにはどうすれば良いですか(どのような式で表せますか)。
この時、コート面と円盤の摩擦は無視できるほど小さいので円盤は減速しない事とし、
円盤がラケットに衝突した場合の跳ね返り係数は1とし、
ラケットはしっかり握っていて、円盤と衝突しても軌道が変わらない事とします。

A 回答 (5件)

円盤の半径をR1、ラケットの半径をR2として、



(1) 回転・平行移動させた座標系(X,Y)において、衝突時の円盤の位置が(0,0), ラケットの位置が(R1+R2,0)になるようにする。この座標変換(行列)をTとする。
(2) この座標系における、衝突前の円盤の速度ベクトルv, ラケットの速度ベクトルuを計算する。すなわち、
  u = T(r1, r2)
  v = T(d1, d2)
(3) さらに、ラケットが静止している座標系における衝突前の円盤の速度ベクトルwを計算。もちろん
  w = v - u
(4)以上の変換によって、「X=0のところに壁があって跳ね返る」というのと同じことになる。なぜなら、
> ラケットはしっかり握っていて、円盤と衝突しても軌道が変わらない
(あるいは「ラケットの質量は円盤の質量に比べてものすごく大きい」というのでも同じことだ)から。
 従って、衝突後、円盤の速度ベクトルwのX成分は符号が反転し、Y成分はそのまま。これをw’とする。
(5) ラケットが動いている座標系((2)のやつ)における衝突後の円盤の速度ベクトルv'は
  w' = v' - u
(6)w'を元の座標系における速度ベクトルに変換する。すなわち、Tの逆変換をT*として
  T* v'
を計算。

という手順。
    • good
    • 0
この回答へのお礼

具体的な手順をありがとうございます。
順に当てはめて、求めようと思いました。
しかし、衝突時の円盤の位置が(0, 0)、ラケットの位置が(R1+R2, 0)になるように回転・平行移動させた各ベクトルを求めるのは、新たに質問をしなければいけないほどに難しく(そして、最終的に元の位置に戻す手順までの道のりを考えた時に、気が遠くなってしまい)、頂いた手順(1)でいきなり挫折しました。
そしてこの挫折はライブラリーを探す原動力となり、そして、それを入手し、その使い方を学習し、実際にこのライブラリーを使っていい感じの跳ね返りアクションが実装できました。
微妙に変な動きになる時もあるので、少し不満ですが、1から自分で作り上げるのは、難しいことが分かりましたので、いったん解決といたします。
このたびは、先生方の回答を試すことができず、すみませんでした。

お礼日時:2023/10/29 23:35

No.1 です。

「お礼」に書かれたことについて。

>先述の条件に加えて、円盤の回転数は毎秒z回転とし、ラケットの回転は無いものとした場合の、円盤の跳ね返り方向および速度の求め方をご教示ください。

円盤の回転を考慮すると「剛体の運動」として
・円板重心の並進運動
・円板重心周りの回転運動
の両方を考えないといけないので結構大変です。

まずは「円板の回転はない」として、円板重心だけの動きを作ってみたら?
ラケットの運動量を考えると大変なので、ラケットは「当たった瞬間は固定壁」と考えて、円盤の「跳ね返り係数」と「運動量保存」で解いてみたらいかがですか?
その場合には、「円板の速度」を「ラケットが静止していると考えた相対速度」で考え、
・ラケット面に垂直な成分
・ラケット面に平行な成分
に分けて考えればよいです。

参考

https://wakariyasui.sakura.ne.jp/p/mech/unndoury …
https://wakariyasui.sakura.ne.jp/p/mech/hannpatu …

円盤の回転運動は、ラケットと円板との間に働く「摩擦力」(当たり方による「垂直抗力」の大きさで変わるので一定ではない)によって「加速・減速」が起こるのをいちいち「運動方程式」を解いていかないといけないので大変です。
    • good
    • 0
この回答へのお礼

勉強させていただきました。
そして、私がやろうとしている事が(私には)難しい事が分かりました。
つまり満足です^^

お礼日時:2023/10/29 22:58

>ラケットはしっかり握っていて



とすると、実効的な質量は無限大として扱って良い気がします。
手の握りをダンパーにモデル化すると大変そう。

円盤の回転は・・・ 円形境界はツルツルということで
取りあえず無しじゃだめかな(^_^;)

衝突の瞬間、ラケットが静止している座標系を使うと
単純な円形境界での反射衝突になるので
考えをまとめやすそう。
    • good
    • 0
この回答へのお礼

円盤の重さと比べて、ラケットの重さ+手で支える力は無限大として差し支えないと思います。
円形境界はツルツル^^いいですね。
円と円の衝突面の面積は極小で、しかも接触時間は一瞬ですので、摩擦力が回転や跳ね返り方向に与える影響も極小と思われます。

お礼日時:2023/10/29 22:49

基本的にはラケットと円盤だけを含む座標を決めて運動量保存するように衝突の前後に対する式(サブルーチン)を作り、コート全体を表す座標に変換するだけです。

回転があると摩擦を考慮して剛体運動の式になるのでまず回転は無視する方がいいでしょう。後で組み込めばいいです。
衝突直前のラケットの運動方向と円盤の運動方向、ラケット面の方向(法線の方向)と円盤の位置関係にも注意して式を立てればいいでしょう。まずは、ある高さから床面に落ちて跳ね返るボールの運動をシミュレートしてみてはいかがですか。それがラケットと円盤の衝突のサブルーチンに発展できます。

それから、記号の取り方を整理しないと検算もできなくなりますよ。方向と速度が同じ記号(d,rなど)は混乱の元。方向はベクトルなので成分で書くかマトリックスにすること。進行方向および速度が (x,y)?これらもベクトル量です。
    • good
    • 0
この回答へのお礼

回転を考慮した方が、より自然な動きになって良いと思ったのですが、その分計算が複雑になるので、まずは回転を無視して作りこんだ方が良いのですね。
おっしゃる通り、変数が多すぎて、作りこむ前から混乱しています。
当方、高校のころ物理は選択科目でして、しかも成績上位の生徒しか選択できないとあって、物理を知らないまま大人になりました^^;

お礼日時:2023/10/29 22:35

2次元ですか?


だったら単純に「運動量保存」と「跳ね返り係数」で決まります。

円盤の回転や「傾き」は考えないのですか?
あるいは「浮き上がり」を含めた3次元の動きとか。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
2次元のエアホッケーゲームを作ろうとしています。
円盤の回転は頭にありませんでしたが、
回転によって、跳ね返る方向が大きく変わるので、回転を考慮すべきだと思いました。
傾きは考慮せず、円盤とコート面は常に平行とします。
よって、先述の条件に加えて、円盤の回転数は毎秒z回転とし、ラケットの回転は無いものとした場合の、円盤の跳ね返り方向および速度の求め方をご教示ください。

お礼日時:2023/10/25 01:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A