836 矩形重疊

2022-05-19 16:58:01 字數 1542 閱讀 4105

矩形以列表[x1, y1, x2, y2]的形式表示,其中(x1, y1)為左下角的座標,(x2, y2)是右上角的座標。

如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。

給出兩個矩形,判斷它們是否重疊並返回結果。

示例 1:

輸入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]

輸出:true

示例 2:

輸入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]

輸出:false

說明:

兩個矩形rec1rec2都以含有四個整數的列表的形式給出。

矩形中的所有座標都處於-10^910^9之間。

判斷兩個矩形是否有重疊,又因為矩形給出的方式是[1, 2, 3, 4], (1,2)是左下角的座標,(3,4)是右上角的座標。

因此,矩形的4條邊必定與座標軸各自平行。

可考慮以下幾種可能。

兩個矩形恰有一條邊重疊,另外一側相交

乙個矩形的乙個角在另乙個矩形內部

乙個矩形的兩個角在另乙個矩形內部

兩個矩形的中間部分相交

乙個矩形包裹著另乙個矩形

想到這裡,可結合兩種方法來判斷。

判斷乙個矩形的4個角是否在另乙個矩形內,若有任意乙個角滿足,可斷定兩個矩形有相交;

判斷乙個矩形的形心是否在另乙個矩形內部,增加這個判定主要是針對上面的第4個可能,

即便乙個矩陣的任何乙個角不在另乙個矩陣中,兩者也能相交。

1 #include 2 #include 3

using

namespace

std;45

6//如何判斷兩個矩形是否重疊,兩個判斷疊加7//

1. 矩形1的形心在矩形2中或者矩形2的形心在矩形1中則兩者重疊。8//

2. 矩形1的四點是否在矩形2中,矩形2的四點是否在矩形1中

9class

solution

1819

bool isin1(vector& rec1, vector& rec2) //

判斷rec2的形心是否在rec1中

2033

34bool isin2(vector& rec1, vector& rec2) //

判斷rec2是否有點在rec1內部

3550

};51

52int

main()53;

55int b = ;

56 vector vec1(a, a+4

);57 vector vec2(b, b+4

);58

solution s;

59 cout << s.isrectangleoverlap(vec1, vec2) <60 }

836 矩形重疊

矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1,1,3...

836 矩形重疊

矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1,1,3...

836 矩形重疊

矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1,1,3...