两个矩形发生碰撞的情况有如下几种:
![](https://img.haomeiwen.com/i28858107/61bf84309a8dd81a.png)
此外还有一种容易被忽视的碰撞情况(重叠):
![](https://img.haomeiwen.com/i28858107/1970d28004640bbd.png)
我们可以保存两个矩形的左上和右下两个坐标的坐标值,然后对比两个坐标即可得出是否相交。
/**
* one[0]:矩形one左上角x坐标
* one[1]:矩形one左上角y坐标
* one[2]:矩形one右下角x坐标
* one[3]:矩形one右下角y坐标
* two[0]:矩形two左上角x坐标
* two[1]:矩形two左上角y坐标
* two[2]:矩形two右下角x坐标
* two[3]:矩形two右下角y坐标
*
* @param one 第一个矩形的左上角坐标和右下角坐标数组
* @param two 第二个矩形的左上角坐标和右下角坐标数组
* @return 如果发生碰撞则返回true,否则返回false
*/
public static boolean isColliding(int one[], int two[]) {
if (one[0] > two[2]) return false;
if (one[2] < two[0]) return false;
if (one[1] > two[3]) return false;
if (one[3] < two[1]) return false;
return true;
}
public static void main(String[] args) {
int one[] = {10, 10, 60, 110};
int two[] = {20, 30, 70, 130};
System.out.println(isColliding(one, two));
}
输出结果:
true
网友评论