【问题标题】:Return rotated rectangle in Java [closed]在Java中返回旋转的矩形[关闭]
【发布时间】:2020-12-20 18:54:23
【问题描述】:

我在我的游戏中使用 Java 矩形来检查对象之间的碰撞(使用 intersects() 方法)。据我所知,如果其中一个对象被旋转,则无法做到这一点。

例如,游戏中的一个物体旋转了 65°。我将如何检查这个对象的碰撞?有没有办法可以为它的矩形添加旋转?如果没有,有没有一种方法可以在不使用矩形的情况下检查碰撞(使用例如像素颜色)?

【问题讨论】:

  • 你试过用铅笔和纸画两个矩形,一个旋转一个不旋转,然后想出一个算法吗?然后将其转换为您自己的intersects 方法。这就是大多数此类问题的解决方法。
  • @gpash 如果你想做正确的事情,你需要分段相交:想象两个细长的矩形组成一个 X,其中一个矩形的点都不在另一个矩形内。请注意,您需要线段,而线段相交是不够的:想象那些相同的线段,在顶部不接触茎的地方形成一个 T。

标签: java collision-detection rectangles


【解决方案1】:

也许您应该提供有关您的项目的更多信息,甚至向我们展示几行代码。无论如何,如果您使用笛卡尔平面,旋转点的一种方法是:

    public Point ruota(double alpha, Point r){
      double qx = r.x + (x - r.x) * Math.cos(alpha) - (y - r.y)* Math.sin(alpha);
      double qy = r.y + (x - r.x) * Math.sin(alpha) + (y - r.y)* Math.cos(alpha);
      return new Point(qx, qy);
    }

【讨论】:

  • 我以前没有使用过 Points,所以举个例子 - 这会创建一个旋转 45° 的矩形吗?矩形 r = new Rectangle(new Point(100, 100)); r.add(新点(150, 50)); r.add(新点(200,100)); r.add(新点(150, 150));
  • 旋转需要一个旋转中心。您在那里使用 r 作为中心,而您的代码缺少参数 xy,即您正在旋转的点的坐标。
  • @tucuxi 如果你指的是我的代码,r是Point类的一个实例:这个方法中不需要定义x和y。
  • 啊。 java.awt 中已经有一个 Point 类,我以为你在使用它而不是自己编写。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
相关资源
最近更新 更多