矩形重疊
題目描述
矩形以列表 [x1, y1, x2, y2] 的形式表示项鬼,其中 (x1, y1) 為左下角的坐標(biāo),(x2, y2) 是右上角的坐標(biāo)何之。
如果相交的面積為正吁津,則稱兩矩形重疊。需要明確的是绒疗,只在角或邊接觸的兩個(gè)矩形不構(gòu)成重疊侵歇。
給出兩個(gè)矩形,判斷它們是否重疊并返回結(jié)果吓蘑。
示例:
輸入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
輸出:true
輸入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
輸出:false
提示:
兩個(gè)矩形 rec1 和 rec2 都以含有四個(gè)整數(shù)的列表的形式給出惕虑。
矩形中的所有坐標(biāo)都處于 -10^9 和 10^9 之間。
題目分析
上學(xué)期修過(guò)計(jì)算機(jī)圖形學(xué)這課磨镶,里面講到了類似的算法溃蔫,所以這題算是比較簡(jiǎn)單了,寫個(gè)題解來(lái)紀(jì)念一下我的計(jì)圖:
- 邊界碰撞判定
首先我們將兩個(gè)數(shù)組轉(zhuǎn)換成可讀性更高的變量,然后可以發(fā)現(xiàn)其實(shí)情況真的很少
int left1 = rec1[0], bottom1 = rec1[1];
int right1 = rec1[2], top1 = rec1[3];
int left2 = rec2[0], bottom2 = rec2[1];
int right2 = rec2[2], top2 = rec2[3];
- 我的頭是不是頂?shù)搅四愕钠ü桑喝绻鸼ottom2比top1要大琳猫,就是粉色矩形在vertical上是高于藍(lán)色的伟叛,絕對(duì)不相交
- 我的右手有沒(méi)有碰到你的左手:如果left2比right1要大,就是粉色矩陣在horizontal上是大于藍(lán)色的脐嫂,絕對(duì)不相交
- 是1. 2.的鏡像统刮,粉和藍(lán)位置互換
- 邊界重疊判定
上面的思路是檢查是否不相交的紊遵,這種思路是檢查是否相交的
-
如果max( left1, left2) < min( right1, right2),那么他們?cè)趆orizontal是相交的侥蒙,如下圖所示
-
如果max( bottom1, bottom2) < min( top1, top2)暗膜,那么他們?cè)趘ertical是相交的,如下圖所示
-
如果橫向和縱向都相交鞭衩,那么兩個(gè)矩形就是相交的学搜,如下圖所示:
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
int left1 = rec1[0], bottom1 = rec1[1];
int right1 = rec1[2], top1 = rec1[3];
int left2 = rec2[0], bottom2 = rec2[1];
int right2 = rec2[2], top2 = rec2[3];
if(Math.min(right1,right2) > Math.max(left1,left2)
&& Math.min(top1,top2) > Math.max(bottom1,bottom2))
return true;
return false;
}