我正在尝试编写一个二维模拟程序,模拟一个球撞到固定的垂直和水平墙壁时反弹的情况。模拟与墙面碰撞很简单 - 对于垂直墙壁,只需取反X方向速度;对于水平墙壁,只需取反Y方向速度。问题在于,球还可以与墙角发生碰撞,即水平墙壁与垂直墙壁相交的位置。我已经想出了如何检测碰撞角的方法。我的问题是,球应该如何对这种碰撞做出反应 - 即其X和Y速度会发生怎样的变化。
以下是我已知或知道如何查找的内容:
- 碰撞被检测到时球心的X和Y坐标 - 球速的X和Y分量 - 角落的X和Y坐标 - 球心和角落之间的角度 - 碰撞发生前球的行进方向的角度 - 当检测到碰撞时,球与角落重叠的量
我猜最好假装角落是一个无限小的圆,这样我就可以将球与该圆的碰撞视为球与在碰撞点处切线于圆的墙壁相撞。我认为,我所需要做的就是将坐标系旋转到与这个想象中的墙壁对齐,然后在该系统下取反球的X分量,并将坐标旋转回原始系统。问题是,我不知道如何编写此程序。
顺便说一句,这是一个理想的模拟。我没有考虑摩擦力或球的旋转等任何因素。我使用Objective-C,但我真的只想要一个通用算法或一些建议。
以下是我已知或知道如何查找的内容:
- 碰撞被检测到时球心的X和Y坐标 - 球速的X和Y分量 - 角落的X和Y坐标 - 球心和角落之间的角度 - 碰撞发生前球的行进方向的角度 - 当检测到碰撞时,球与角落重叠的量
我猜最好假装角落是一个无限小的圆,这样我就可以将球与该圆的碰撞视为球与在碰撞点处切线于圆的墙壁相撞。我认为,我所需要做的就是将坐标系旋转到与这个想象中的墙壁对齐,然后在该系统下取反球的X分量,并将坐标旋转回原始系统。问题是,我不知道如何编写此程序。
顺便说一句,这是一个理想的模拟。我没有考虑摩擦力或球的旋转等任何因素。我使用Objective-C,但我真的只想要一个通用算法或一些建议。