为什么不使用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,宽度,高度,其中x,y是矩形的左上角。您可以轻松地将左下角的点转换为左上角。
我推荐上述方法,但是如果您真的想自己做,可以按照以下步骤操作:
比方说
(x1, y1), (x2, y2)分别
(x3, y3), (x4, y4)是Rect1的左下角和右下角 。
- 发现的较大的一个
x1
,x3
和中较小的一个x2
,x4
比方说xL
,xR
分别- 如果
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部分即可。



