藍橋杯 矩形區域的交和並 計算幾何

2021-06-29 01:19:22 字數 2108 閱讀 7236

在編寫圖形介面軟體的時候,經常會遇到處理兩個矩形的關係。

如圖【1.jpg】所示,矩形的交集指的是:兩個矩形重疊區的矩形,當然也可能不存在(參看【2.jpg】)。兩個矩形的並集指的是:能包含這兩個矩形的最小矩形,它一定是存在的。

本題目的要求就是:由使用者輸入兩個矩形的座標,程式輸出它們的交集和並集矩形。

矩形座標的輸入格式是輸入兩個對角點座標,注意,不保證是哪個對角,也不保證順序(你可以體會一下,在桌面上拖動滑鼠拉矩形,4個方向都可以的)。

輸入資料格式:

x1,y1,x2,y2

x1,y1,x2,y2

資料共兩行,每行表示乙個矩形。每行是兩個點的座標。x座標在左,y座標在右。座標系統是:螢幕左上角為(0,0),x座標水平向右增大;y座標垂直向下增大。

要求程式輸出格式:

x1,y1,長度,高度

x1,y1,長度,高度

也是兩行資料,分別表示交集和並集。如果交集不存在,則輸出「不存在」

前邊兩項是左上角的座標。後邊是矩形的長度和高度。

例如,使用者輸入:

100,220,300,100

150,150,300,300

則程式輸出:

150,150,150,70

100,100,200,200

例如,使用者輸入:

10,10,20,20

30,30,40,40

則程式輸出:

不存在10,10,30,30

注意:請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!

在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。

題目中給出的兩個矩形的對角點的引數,這兩個對角點到底是哪條對角線的點不確定,其實也不重要。討論兩個矩形的交集和並集,這兩個概念中給出的很清楚,下面,分析一下這道題目的做法:

預處理的工作,比較蛋疼的是,題目中給出的四個引數並不是標準的數值,而是乙個摻雜了「,」的字串,我們要從字串中提取出四個數值,然後將兩個矩形的所有x值放在一起,所有的y值放在一起,方便之後處理

一、交集

在求交集的時候,我們可以使用掃瞄線法,不難發現,如果兩個矩形相交,我們從左向右掃瞄x值,第二個x值就是重疊部分矩形的左上角頂點的x值;從上到下掃瞄,第二個遇到的y值就是重疊部分矩形的左上角頂點的y值,這樣,我們就得到了左上角頂點座標。然後,我們再掃瞄一遍x,可以看到,第二個x和第三個x的差的絕對值就是重疊矩形的寬度;再掃瞄一遍y,第二個y和第三個y的差的絕對值就是重疊矩形的高度。

ok,思路很清楚,從圖形上也很直觀,關鍵是如何掃瞄,這裡就可以看到我們之前將x和y分別單獨儲存在一起的好處,x陣列中儲存了兩個矩形的4個x值,y陣列中儲存了兩個矩形的4個y值,我們對x和y分別進行從小到大排序,這樣從左到右的四個值正好與我們的掃瞄順序相對應,也就是直接把相應的資料代入即可

關於判斷兩個矩形是否相交,有很多方法,這裡,我使用了一種比較好想的,我們首先要算出兩個矩形的寬度w1,w2和高度h1,h2,然後對x和y進行從小到大排序,將兩個矩形看成乙個圖形,求出這個圖形的寬度w=(x[3]-x[0])和高度h=(y[3]-y[0]),如果w>=w1+w2或者h>=h1+h2,那兩個圖形肯定是不相交的。

二、並集

這個比較簡單,因為上一步已經排好序了,所以這一步直接找第乙個遇到的x值和第乙個遇到的y值作為左上角頂點的座標,寬度就是x的最大值-最小值,高度就是y的最大值-最小值

#include#include#include#includeusing namespace std;

struct rec

rec[2];

void getarg(char *str,char *num,int *arg)

arg[q++]=temp;

} }}bool judge(int *x,int *y)

void jiaoji(int *x,int *y)

jiaoji(x,y);

bingji(x,y);

return 0;

}

藍橋杯 矩形面積交

問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。輸出格式 輸出僅...

藍橋杯 基礎 矩形面積交

題目 基礎練習 矩形面積交 時間限制 1.0s 記憶體限制 512.0mb 問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點...

藍橋杯 基礎練習 矩形面積交

問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。輸出格式 輸出僅...