java - 使用图形的桨碰撞侧检测

标签 java algorithm swing graphics collision-detection

我实现了一种 Pong,其中 Racket (Rectangle2D) 可以旋转。 为了获得更高的准确性,许多事情都由 Graphics2D 管理。 旋转也由上一个类的方法 rotate(...) 管理。

为了达到真实的弹跳效果,我需要知道球击中 Racket 的位置(只是侧面,而不是特定点)。

我尝试定义(并旋转)两个代表桨的背面和正面的 Rectangle2D,然后通过 hit 方法识别这两个中的一个的弹跳(Rectangle2D r, Shape s, boolean onStroke),但它不能正常工作。

这是 Java 类 Graphics2D:

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

你有什么想法吗?

最佳答案

假设您有一个长方形的 Racket ,并且知道长方形和圆的中心以及长方形的旋转角度。 假设旋转为零意味着您的矩形水平对齐(宽度 > 高度)。

  • 计算差值 vector (圆心)-(矩形中心)
  • 获取该 vector 的角度并减去矩形的旋转( vector 的角度为 Math.atan2(y, x))
  • 结果值 a 告诉您圆的相对方向
  • 确保a在0到2*pi之间

q = Math.atan2(矩形的高度,矩形的宽度)

  • 如果 a 介于 q 和 pi-q 之间,则您的圆圈击中了前面的长(上)边。
  • 如果 a 小于 q 或大于 2*pi-q 它在右侧。
  • 如果 a 在 pi-q 和 pi+q 之间,则它在左侧。
  • 如果 a 在 pi+q 和 2pi-q 之间,它就到达了矩形的底部

关于java - 使用图形的桨碰撞侧检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479060/

相关文章:

java - 在迭代中从 HashSet 中删除元素

c++ - 从不平衡的二叉搜索树中删除一个元素

java - 如何停止编辑 Jtree 的选定节点的鼠标单击事件

Python:为给定列表查找随机 k 子集分区

java - JButton 未放置在与其 JPanel 相同的位置

java - 默认情况下将jTextArea设置为visible false

java.sql.SQLException : ORA-01017: invalid username/password; logon denied 异常

java - 本地关闭错误意味着使用 jetty http 客户端发送 https 调用是什么意思?

java - 从非静态上下文调用同一个类的java构造函数会导致递归,但是使用静态它可以正常工作吗?

根据距离 (x,y) 设置适当的 "audio"音量的算法