Pong 游戏中的三角学和碰撞/反射

发布于 2024-12-25 02:38:15 字数 314 浏览 1 评论 0原文

为了好玩,我用 Python 和 Pygame 制作 Pong。我在反射方面遇到了一些麻烦。

所以球有一个与之相关的角度。由于正 y 向下,因此该角度向下。如果球击中顶墙或底墙,我可以简单地取消角度,它就会正确反射,但问题在于左墙和右墙。我无法弄清楚在这种情况下如何改变角度的三角学。我目前正在尝试以下代码片段的组合,但没有运气。

 self.angle = -(self.angle - math.pi/2)

我已附上代码。您可以轻松地亲自尝试一下。只需记住取出我尚未包含或使用的“帧速率”模块即可。我将不胜感激任何意见。谢谢!

For fun I am making Pong in Python with Pygame. I have run into some trouble with reflections.

So the ball has an angle associated with it. Since positive y is down this angle is downward. If the ball hits the top or bottom walls I can simply negate the angle and it will reflect properly, but the trouble is with the left and right walls. I cannot figure out the trigonometry for how to change the angle in this case. I am currently trying combinations of the below snippet but with no luck.

 self.angle = -(self.angle - math.pi/2)

I have attached the code. You can try it for yourself easily. Just remember to take out the "framerate" module which I have not included or used yet. I would appreciate any input. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

亢潮 2025-01-01 02:38:15

您需要查看入射角

在此处输入图像描述

基本上,您需要找到传入向量与向量之间的角度theta球所击中的墙壁的法线。当入射角为(壁法线)-theta 时,所得角度为(壁法线)+theta

可以使用输入向量与墙壁法线之间的点积找到角度,然后取反余弦(首先对向量进行归一化)。

You'll want to look into Angle of Incidence.

enter image description here

Basically you'll want to find the angle theta between your incoming vector and the normal of the wall the ball is hitting. Where the incoming angle is (wall normal)-theta the resulting angle is (wall normal)+theta.

The angle can be found using the dot product between your incoming vector and the normal of the wall, then taking the inverse cosine (normalize your vectors first).

年华零落成诗 2025-01-01 02:38:15

你应该使用:

math.pi - angle

You should use:

math.pi - angle
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文