是否有人知道可用于确定两个矩形重叠的方向和方向的算法?我花了好几个小时试图解决这个问题,所以我可以将它实现到用slick2d + java编写的基本平铺游戏中。
答案 0 :(得分:1)
轮询角落的坐标,如果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);
}
}
答案 1 :(得分:1)
让我们将每个矩形表示为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
其他组合是不可能的。
答案 2 :(得分:0)
首先在矩形之间建立一个中心点(第二个矩形的中心 - 第一个矩形的中心)。 检查距离从每个矩形的每个点到中心点。 选择2个最近的点,检查其中一个是否在其他矩形内,如果是,则由这两个点创建的矩形为我们提供重叠区域。