私は現在、ブレイクアウトのようなゲームを書いている最中ですが、どうすればボールを表面から適切に跳ね返すことができるのだろうと思っていました。
私は速度を90度回転させる素朴な方法を採用しました。それは次のとおりです。
[vx, vy] -> [-vy, vx]
これは(当然のことながら)あまりうまく機能しませんでした。ボールの位置と速度、およびボールが当たるポイント(ただし、代わりに跳ね返るポイント)がわかっている場合、そのポイントからボールを跳ね返すにはどうすればよいですか?
制約:
- 私は整数数学を使用しています(どこにもFPはありません)
- 私のすべての表面は単純な平らな表面です(垂直、水平、またはブロック)
- 90度の角度で跳ね返りたいだけです
- すべての衝突は純粋に弾力性があります(これはブレイクアウトです-摩擦などの必要はありません)
言語固有のコードは必要ありません。誰かがこれを適切に行う方法についての小さな数式を提供できれば、それは私にとってうまくいくでしょう。
ありがとう!