为什么不使用JDK API来代替您完成这个任务呢?
Rectangle rect1 = new Rectangle(100, 100, 200, 240);
Rectangle rect2 = new Rectangle(120, 80, 80, 120);
Rectangle intersection = rect1.intersection(rect2);
要使用 java.awt.Rectangle
类,构造函数的参数为:x,y,width,height,其中 x,y 是矩形的左上角。您可以轻松地将左下点转换为左上角。
我建议使用上述方法,但如果您真的想自己做,可以按照以下步骤操作:
设 (x1, y1),(x2, y2)
分别是 Rect1 的左下角和右下角,(x3, y3),(x4, y4)
分别是 Rect2 的左下角和右下角。
- 找到
x1
、x3
中较大的一个,x2
、x4
中较小的一个,分别记作 xL
、xR
- 找到
y1
、y3
中较大的一个,y2
、y4
中较小的一个,分别记作 yT
、yB
- 如果
yT >= yB
,则返回无交集
- 返回
(xL,yB,xR-xL,yB-yT)
更具 Java 风格的伪代码:
Rect r1 = new Rect(x1, y2, w1, h1);
Rect r2 = new Rect(x3, y4, w2, h2);
int x2 = x1 + w1;
int x4 = x3 + w2;
int y1 = y2 - h1;
int y3 = y4 - h2;
int xL = Math.max(x1, x3);
int xR = Math.min(x2, x4);
if (xR <= xL)
return null;
else {
int yT = Math.max(y1, y3);
int yB = Math.min(y2, y4);
if (yB <= yT)
return null;
else
return new Rect(xL, yB, xR-xL, yB-yT);
}
就像您看到的那样,如果您的矩形最初是由两个对角线角落定义的,那么它会更容易,您只需要执行// 查找交点
部分。