矩形以列表[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
兩個矩形rec1
和rec2
都以含有四個整數的列表的形式給出。
矩形中的所有座標都處於-10^9
和10^9
之間。
判斷兩個矩形是否有重疊,又因為矩形給出的方式是[1, 2, 3, 4], (1,2)是左下角的座標,(3,4)是右上角的座標。
因此,矩形的4條邊必定與座標軸各自平行。
可考慮以下幾種可能。
兩個矩形恰有一條邊重疊,另外一側相交
乙個矩形的乙個角在另乙個矩形內部
乙個矩形的兩個角在另乙個矩形內部
兩個矩形的中間部分相交
乙個矩形包裹著另乙個矩形
想到這裡,可結合兩種方法來判斷。
判斷乙個矩形的4個角是否在另乙個矩形內,若有任意乙個角滿足,可斷定兩個矩形有相交;
判斷乙個矩形的形心是否在另乙個矩形內部,增加這個判定主要是針對上面的第4個可能,
即便乙個矩陣的任何乙個角不在另乙個矩陣中,兩者也能相交。
1 #include 2 #include 3using
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...