Reflection 乒乓球游戏中的三角学与碰撞/反射

Reflection 乒乓球游戏中的三角学与碰撞/反射,reflection,pygame,trigonometry,collision,pong,Reflection,Pygame,Trigonometry,Collision,Pong,为了好玩,我正在用Pygame用Python制作乒乓球。我在思考方面遇到了一些麻烦 所以球有一个与之相关的角度。因为正y是向下的,所以这个角度是向下的。如果球碰到顶壁或底壁,我可以简单地否定这个角度,它会正确地反射,但问题是左右壁。在这种情况下,我无法计算出如何改变角度的三角学。我目前正在尝试以下代码片段的组合,但运气不佳 self.angle = -(self.angle - math.pi/2) 我已附上代码。你自己可以很容易地试一下。只要记得拿出“帧率”模块,我还没有包括或使用。如果您

为了好玩,我正在用Pygame用Python制作乒乓球。我在思考方面遇到了一些麻烦

所以球有一个与之相关的角度。因为正y是向下的,所以这个角度是向下的。如果球碰到顶壁或底壁,我可以简单地否定这个角度,它会正确地反射,但问题是左右壁。在这种情况下,我无法计算出如何改变角度的三角学。我目前正在尝试以下代码片段的组合,但运气不佳

 self.angle = -(self.angle - math.pi/2)
我已附上代码。你自己可以很容易地试一下。只要记得拿出“帧率”模块,我还没有包括或使用。如果您有任何意见,我将不胜感激。谢谢

您应该使用:

math.pi - angle
你会想调查的

基本上,你需要找到入射向量和球撞击的墙法线之间的角度θ。当入射角度为(墙法线)-θ时,得到的角度为(墙法线)+θ

可以使用传入向量和墙法线之间的点积,然后取反余弦(首先规范化向量),来找到角度

代码如下: