Java 基于图形的桨叶碰撞侧面检测

Java 基于图形的桨叶碰撞侧面检测,java,algorithm,swing,graphics,collision-detection,Java,Algorithm,Swing,Graphics,Collision Detection,我已经实现了一种乒乓球,其中的桨(矩形2D)可以旋转。 为了获得更高的准确度,许多事情都是通过Graphics2D进行管理的。 旋转也由上一个类的rotate(…)方法管理 为了达到一个真实的反弹,我需要知道球在哪里撞击到球拍(只有一侧,而不是特定的点) 我试着定义(并旋转)两个矩形2D,它们代表划桨的背面和正面,然后通过方法hit(矩形2D、形状s、布尔onStroke)识别其中一个的反弹,但它不能正常工作 以下是java类Graphics2D: 你知道吗?假设你的桨有一个矩形,并且知道矩形

我已经实现了一种乒乓球,其中的桨(矩形2D)可以旋转。 为了获得更高的准确度,许多事情都是通过Graphics2D进行管理的。 旋转也由上一个类的rotate(…)方法管理

为了达到一个真实的反弹,我需要知道球在哪里撞击到球拍(只有一侧,而不是特定的点)

我试着定义(并旋转)两个矩形2D,它们代表划桨的背面和正面,然后通过方法hit(矩形2D、形状s、布尔onStroke)识别其中一个的反弹,但它不能正常工作

以下是java类Graphics2D:


你知道吗?

假设你的桨有一个矩形,并且知道矩形和圆的中心以及矩形的旋转。 假设旋转为零表示矩形水平对齐(宽度>高度)

  • 计算差分向量(圆心)-(矩形中心)
  • 获取该向量的角度并减去矩形的旋转(向量的角度是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之间,它将到达矩形的底部

谢谢您的回答。我使用了它的一个修改版本。下面我将发布我的代码。