Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定两个矩形重叠多少以及重叠方向的算法?_Java_Algorithm_Collision Detection - Fatal编程技术网

Java 确定两个矩形重叠多少以及重叠方向的算法?

Java 确定两个矩形重叠多少以及重叠方向的算法?,java,algorithm,collision-detection,Java,Algorithm,Collision Detection,有人知道一种算法可以用来确定两个矩形重叠的程度和方向吗?我花了几个小时试图弄明白这一点,这样我就可以将它实现到一个用slick2d+java编写的基本平铺游戏中。首先在矩形之间做一个中心点(第二个矩形的中心-第一个矩形的中心)。 检查从每个矩形的每个点到中心点的距离。 选择两个最近的点,检查其中一个是否在另一个矩形内,如果是,由这两个点创建的矩形将给出重叠区域。轮询角点的坐标,如果Square1在Square2的最近和最远顶点之间有角点,它们因坐标差而相撞 例如: square1.setVert

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

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

轮询角点的坐标,如果
Square1
Square2
的最近和最远顶点之间有角点,它们因坐标差而相撞

例如:

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);
    }
}
square1.setVertex1(0,0);
平方1.setVertex2(2,0);
平方1.setVertex3(2,2);
平方1.setVertex4(0,2);
平方2.setVertex1(1,1);
平方2.setVertex2(4,1);
平方2.setVertex3(4,4);
平方2.setVertex4(1,4);
顶点[]verticesSq1=Square1.getVertices();
对于(顶点顶点顶点:verticesSq1){
if(垂直getXVal>square2.getLowestXVal()&&
vert.getXValsquare2.getlowstyval()&&

让我们将每个矩形表示为R=(x1,x2,y1,y2)(即,(x1,y1),(x1,y2),(x2,y1),(x2,y2)是该矩形的顶点,x1 现在,我们有两个矩形R1和R2,我们想知道它们是否重叠,如果重叠,方向是什么

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

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

其他组合是不可能的。

什么是“在什么方向”呢?你能举一些例子吗?@Vlad By direction我指的是矩形的哪一侧重叠。看看这个问题(以及链接的js代码):side?你是说矩形的边与轴平行?@KarolyHorvath是的。所有矩形都没有旋转。