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

确定两个矩形重叠的程度和方向的算法?

步致远
2023-03-14

有人知道一种算法可以用来确定两个矩形重叠的程度和方向吗?我花了好几个小时试图弄清楚这一点,这样我就可以将它实现为一个用slick2d java编写的基本平铺游戏。

共有3个答案

程智明
2023-03-14

首先在矩形之间做一个中心点(第二个矩形的中心-第一个矩形的中心)。检查每个矩形的每个点到中心点的距离。选择两个最近的点,检查其中一个是否在另一个矩形内,如果是,由这两个点创建的矩形给出了重叠区域。

龚奕
2023-03-14

让我们将每个矩形表示为R=(x1,x2,y1,y2)(即,(x1、y1)、(x1)、(y2)、(x2、y2)和(x2,y 2)是该矩形的顶点,x1

现在,我们有两个矩形R1和R2,我们想知道他们是否重叠,如果是,什么方向。

对于R1的每个顶点,检查它是否在可以用4位表示的矩形R2内。映射非常直接:

0000 -> None (or R2 is inside R1)
0001 -> R2 is bottom right of R1
0010 -> R2 is top right of R1
0100 -> R2 is bottom left of R1
1000 -> R2 is top left of R1
0011 -> R2 is right of R1
0101 -> R2 is bottom of R1
1100 -> R2 is left of R1
1010 -> R2 is left of R1
1111 -> R1 is inside R2

其他的组合是不可能的。

郦楷
2023-03-14

轮询角点的坐标,如果Square1Square2的最近和最远顶点之间有任何角点,它们会因坐标差而碰撞?

示例:

square1.setVertex1(0,0);
square1.setVertex2(2,0);
square1.setVertex3(2,2);
square1.setVertex4(0,2);

square2.setVertex1(1,1);
square2.setVertex2(4,1);
square2.setVertex3(4,4);
square2.setVertex4(1,4);

Vertex[] verticesSq1=Square1.getVertices();
for (Vertex vert: verticesSq1) {
    if(vert.getXVal>square2.getLowestXVal() &&
       vert.getXVal<square2.getHighestXVal() 

       &&
       vert.getYval>square2.getLowestYval() &&
       vert.getYVal<square2.getHighestYVal() {

            System.out.write("Vertex "+vert.ID+" is overlapping Square 2 by " +
            vert.getXval()-square2.getLowestXVal +","+
            vert.getYval()-square2.getLowestYVal);
    }
}
 类似资料:
  • 我试图找出两个矩形是否相互重叠。我将下面的矩形表示为< code>[x1,x2] x [y1,y2] 我只需要一个伪代码,我可以实现它来查找矩形是否彼此重叠。

  • 我有一个问题,也许可以用计算机屏幕上的窗口来最好地说明:创建另一个尽可能大的窗口,不与任何现有窗口重叠。 换句话说:在有限表面(一张纸或一块屏幕)上给定一组N个矩形,找到可以安装在这些矩形之间的最大矩形。(坐标可以是任意的,因此位图在这里不是可行的解决方案。 下面的照片显示了三个矩形(黑色)和最大的矩形(红色)。 http://www.irstafoto.se/blogmtrl/rectangle

  • 问题内容: 我找到了解决方案,但想确保我的逻辑是最有效的。我觉得有更好的方法。我有左下角的(x,y)坐标,2个矩形的高度和宽度,我需要返回第三个矩形,即它们的交点。我不想发布代码,因为我觉得它在作弊。 我弄清楚哪个在图表上最左边和最高。 我检查一个是否与另一个完全重叠,然后反向查看另一个是否在X轴上完全重叠第一个。 我检查X轴上的局部相交。 我基本上对Y轴重复步骤2和3。 我做一些数学运算,并根据

  • 我有经度和纬度的地理坐标,比如西北和东南经度/纬度。所以,当我得到它们的时候,我把它们转换成公制。因此,这里我得到了我的第一个西北和东南坐标的矩形,然后我有了北,南,西,东坐标的相同公制中的边界矩形。我需要检查这两个直角相交的边,我写的是: 我不确定我做得对不对?我的要求是,如果第二个矩形的边界与第一个矩形的边界相交,那么第二个必须留在左边。否则,过滤。

  • 我使用libgdx为一个项目制作了一个2D游戏,我的碰撞检测技术基于。在矩形中重叠方法,效果良好。我想了解其背后的实现,如果我要将其与intersects方法并行,我知道它是如何工作的。但这是唯一的吗?我读到,在离散碰撞检测方法中,不仅需要计算实体是否发生碰撞,还需要计算它们发生碰撞的“程度”(碰撞深度),并使用轴对齐的边界盒算法将实体推回。首先,我对矩形重叠技术是否与libgdx中的AAAB相同

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