📅  最后修改于: 2023-12-03 15:40:32.277000             🧑  作者: Mango
在开发游戏或者其他应用程序时,经常需要判断两个矩形是否有重叠部分。下面介绍几种判断方法。
该方法基于以下事实:如果矩形 A 和矩形 B 有重叠部分,则矩形 A 的最左边的 x 坐标一定小于矩形 B 的最右边的 x 坐标,同时矩形 A 的最右边的 x 坐标一定大于矩形 B 的最左边的 x 坐标,同理,矩形 A 的最上边的 y 坐标一定小于矩形 B 的最下边的 y 坐标,同时矩形 A 的最下边的 y 坐标一定大于矩形 B 的最上边的 y 坐标。因此,我们可以使用简单的比较运算符来检查两个矩形是否重叠。
public static boolean overlap(Rectangle r1, Rectangle r2) {
if (r1.x < r2.x + r2.width && r1.x + r1.width > r2.x && r1.y < r2.y + r2.height && r1.y + r1.height > r2.y) {
return true;
}
return false;
}
上述方法中,r1
和 r2
分别为两个矩形,代码判断的结果为布尔型,返回 true 则表示两个矩形有重叠部分。
该方法首先将矩形的位置表示为左下角和右上角坐标,然后通过比较坐标来判断两个矩形是否有重叠部分。
public static boolean overlap(Rectangle r1, Rectangle r2) {
int r1x1 = r1.x; // r1 左下角 x 坐标
int r1y1 = r1.y; // r1 左下角 y 坐标
int r1x2 = r1.x + r1.width; // r1 右上角 x 坐标
int r1y2 = r1.y + r1.height; // r1 右上角 y 坐标
int r2x1 = r2.x; // r2 左下角 x 坐标
int r2y1 = r2.y; // r2 左下角 y 坐标
int r2x2 = r2.x + r2.width; // r2 右上角 x 坐标
int r2y2 = r2.y + r2.height; // r2 右上角 y 坐标
if (r1x1 <= r2x2 && r1x2 >= r2x1 && r1y1 <= r2y2 && r1y2 >= r2y1) {
return true;
}
return false;
}
上述代码中,r1
和 r2
分别为两个矩形,代码判断的结果为布尔型,返回 true 则表示两个矩形有重叠部分。
该方法分别比较两个矩形的四个坐标(左下角和右上角坐标),从而判断两个矩形是否有重叠部分。
public static boolean overlap(Rectangle r1, Rectangle r2) {
if ((r1.x < r2.x + r2.width) && (r1.x + r1.width > r2.x) &&
(r1.y < r2.y + r2.height) && (r1.y + r1.height > r2.y)) {
return true;
}
return false;
}
上述代码中,r1
和 r2
分别为两个矩形,代码判断的结果为布尔型,返回 true 则表示两个矩形有重叠部分。
以上是三种检查两个矩形是否重叠的方法,其中第一种方法最为常用,推荐使用。