使用Graphics进行桨式碰撞侧检测

时间:2014-01-31 11:32:25

标签: java algorithm swing graphics collision-detection

我已经实现了一种Pong,其中桨( Rectangle2D )可以旋转。 为了获得更高的准确性,许多内容由 Graphics2D 管理。 旋转也由前一个告知类的方法 rotate(...)管理。

为了达到逼真的反弹,我需要知道球击中球的位置(只有侧面,而不是特定点)。

我试图定义(并旋转)两个 Rectangle2D ,它们代表桨的后部和前部,然后通过命中方法识别这两个中的一个中的反弹(Rectangle2D r,Shape s,boolean onStroke),但它无法正常工作。

这是java类 Graphics2D

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

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

  • 计算差异向量(圆心) - (矩形中心)
  • 获取该向量的角度并减去矩形的旋转(向量的角度为Math.atan2(y,x))
  • 结果值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之间,则会触及矩形的底部