为什么不使用 JDK API 为您执行此操作呢?
Rectangle rect1 = new Rectangle(100, 100, 200, 240);
Rectangle rect2 = new Rectangle(120, 80, 80, 120);
Rectangle intersection = rect1.intersection(rect2);
要使用类,构造函数的参数是:x,y,宽度,高度,其中x,y是矩形的左上角。您可以轻松地将左下角的点转换为左上角。java.awt.Rectangle
我推荐上述内容,但如果您真的想自己动手,可以按照以下步骤操作:
分别是 Rect1 的左下角和右下角,分别是 Rect2 的左下角和右下角。(x1, y1), (x2, y2)
(x3, y3), (x4, y4)
- 分别找到 较大的一个 , 和 较小的一个 , , 说 ,
x1
x3
x2
x4
xL
xR
- 分别找到 较大的一个 , 和 较小的一个 , , 说 ,
y1
y3
y2
y4
yT
yB
- 如果 ,则不返回其他交集
yT >= yB
- 返回。
(xL, yB, xR-xL, yB-yT)
一个更像Java的伪代码:
// Two rectangles, assume the class name is `Rect`
Rect r1 = new Rect(x1, y2, w1, h1);
Rect r2 = new Rect(x3, y4, w2, h2);
// get the coordinates of other points needed later:
int x2 = x1 + w1;
int x4 = x3 + w2;
int y1 = y2 - h1;
int y3 = y4 - h2;
// find intersection:
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);
}
如您所见,如果您的矩形最初是由两个对角定义的,那将更容易,您只需要做部分。// find intersection