当前位置: 首页 > 知识库问答 >
问题:

如何使用 Java 检查两个矩形几何图形之间的空间关系

吴兴国
2023-03-14

所以我有这个程序需要测试两个矩形并检查:

    < li >如果测试矩形在参考矩形内 < li >如果测试矩形与参考矩形重叠 < li >如果测试矩形仅与参考矩形共享一条边界 < li >如果测试矩形和参考矩形不同

参考矩形和测试矩形都是用它们的中心坐标(x,y)及其宽度和高度定义的。

我相信我已经正确地编码了第一个检查,但是我无法计算出最后三个重叠、共享边界和完全不同的检查。

以下是我到目前为止四次检查的代码:

    //returns true if the specified rectangle is inside this rectangle
    public boolean contains(MyRectangle2D r){
           if(this.x > r.x + r.width && x + width < r.x && y > r.y +r.height                    && y + height < r.y){
        return true;
    }
    else{
        return false;
    }
    }

    //returns true if the specified rectangle overlaps with this rectangle 
    public boolean overlaps(MyRectangle2D r) {
    if (this.x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y){
        return true;
    }
    else{
        return false;
    }
    }

    //returns true if only the boundaries touch
    public boolean abut(MyRectangle2D r) {
       if(this.x = r.x + r.width && x + width = r.x || y = r.y +r.height && y + height = r.y){
        return true;
    }
    else{
        return false;
    }
}

     //returns true if the rectangles are not touching at all 
     public boolean distinct(MyRectangle2D r) {

     }

共有1个答案

柯翔
2023-03-14

您可以使用Java Topolygy Suite(JTS)来实现以下目的:

  • 首先,您可以使用org.locationtech.jts.util.GeometricShapeFactory(API)创建带有参数的矩形:
  • 然后您可以使用org.locationtech.jts.geom.Geometry(API)
  • 的定义空间关系( 内的重叠,...)

简单代码

// method to create your rectangles like before (Polygon objects)
public static Polygon createPolygon(Coordinate center, double width, double height){
    GeometricShapeFactory shapeFactory = new GeometricShapeFactory();
    shapeFactory.setNumPoints(4);
    shapeFactory.setCentre(center);
    shapeFactory.setWidth(width);
    shapeFactory.setHeight(height);
    return shapeFactory.createRectangle();
}

public static void main(String[] args) {

    // create your rectagles
    Polygon rectangleA = createPolygon(new Coordinate(0, 0), 5, 10);
    Polygon rectangleB = createPolygon(new Coordinate(2, 0), 5, 10);

    // ### check your constraints
    // 1. rectangle is within the reference rectangle
    boolean bWithinA = rectangleB.within(rectangleA); // false

    // 2. rectangle is overlapping the reference rectangle
    boolean bOverlappingA = rectangleB.overlaps(rectangleA); // true

    // 3. rectangle is only sharing a border with the reference rectangle
    boolean bSharesBorderA = rectangleB.touches(rectangleA); // false

    // 4. rectangle and reference rectangle are distinct
    boolean bDistinctsA = rectangleB.disjoint(rectangleA); // false 
}
 类似资料:
  • 我正在使用postgresql、hibernate spatial和postgis,希望能够使用SqlQuery检索几何体对象。 然而,每当我试图查询点、多边形或几何体时,例如 我得到例外: hibernate.cfg.xml: 这不是hibernate spatial产品的一部分,还是我做错了什么? 谢谢你,保罗。 相关库/版本: Hibernate核心-3.6.0.最终.jar postgre

  • 标题说明了一切,我一直在四处寻找,找不到任何直截了当的东西。我将如何采取与点(x1,y1)的线

  • 我正在构建一个自上而下的2D滚动使用java swing与经典游戏Bomberman非常相似的游戏,玩家可以在所有4个基本方向移动角色。 所有的游戏对象都有实例变量,其中包含它们在JPanel上呈现的(x,y)坐标,它们也有用于它们在最后一帧中呈现的前一个(x,y)坐标的实例变量。我的碰撞检测算法本质上是在每次刷新屏幕时检查播放器对象是否与网格中的墙相交--这可以在下面的代码中看到: restor

  • 我正在做一个游戏,在这个游戏中,玩家必须用一个碗来接住掉落的物品。我有一些列表中项目的图像和一个用来捕捉项目的碗的图像。这些项目会持续下降,如果它们到达边界(底部边缘),则会重置到屏幕顶部。我完成了这个逻辑,允许物品落下,但我不知道如何检测碗和物品之间的碰撞。 我的代码:

  • 在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)

  • 我想检测rect什么时候碰到障碍物(obst1和obst2,obst3暂时不加)。我的障碍随着路径转换而移动。所有的形状都是长方形。提前感谢!!< br >以下是我的代码: