1. 程式人生 > 其它 >構建之法———其二

構建之法———其二

題目描述:

  矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 為左下角的座標,(x2, y2) 是右上角的座標。矩形的上下邊平行於 x 軸,左右邊平行於 y 軸。如果相交的面積為 正 ,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形 rec1 和 rec2 。如果它們重疊,返回 true;否則,返回 false 。

 

解題思路:

  以一個矩形作為參考點,另一個矩形要想與它不重疊,只能出現在它的四周(邊可以重疊)。如下圖所示,實際上位於左上邊就滿足了左邊部分跟上邊部分兩個條件。而題目給定的描述兩端點的陣列,正好代表了每條邊的位置,x1表示左邊,x2表示右邊,y1表示下邊,y2表示上邊。

 

 

 

   我們以rec2描述的矩形作為參考矩形,那麼可以比較rec1與rec2相對的兩條邊的位置來判定是否重疊。下面列出不重疊的情況:

  •   rec1位於rec2左面:rec1的x2(右邊位置)必然小於等於rec2的x1(左邊位置)
  •   rec1位於rec2右面:rec1的x1(左邊位置)必然大於等於rec2的x2(右邊位置)
  •   rec1位於rec2上面:rec1的y1(下邊位置)必然大於等於rec2的y2(上邊位置)
  •   rec1位於rec2下面:rec1的y2(上邊位置)必然小於等於rec2的y1(下邊位置)

 

var isRectangleOverlap = function
(rec1, rec2) { if(rec1[2]<=rec2[0]||rec1[0]>=rec2[2]||rec1[1]>=rec2[3]||rec1[3]<=rec2[1]){ //不重疊的情況 return false; }else{ return true; } };