基礎演算法題 矩形面積相交

2021-10-03 09:05:24 字數 1493 閱讀 7514

本人為一名普通二本學校自動化專業的大二學生,對程式設計有著少許興趣。致力將演算法寫得更加通俗易懂。

該題主要考查了判斷、線段交,只要能夠將矩形之間的關係弄清楚題目就會變得很簡單。

題目「對於每個矩形,我們給出它的一對相對頂點的座標」,這也告訴了我們它的特殊情況會有很多,如果直接將資料記錄下來然後就開始計算面積,無疑難度會很大,那我們有什麼方法能夠將資料「變形」到我們希望的樣子呢?

步驟一:變形(化簡題目)

①:通過觀察可以得到每一行代表矩形的相對定點座標(x1 y1 x2 y2),x與y可以組成四個不同的組合(我們假設每個值都不同),剛好對應矩形的四個頂點(這表示我們可以將x1、x2與y1、y2隨意組合,組合數都是矩形的頂點)。

②:我們可以將x1、y1作為矩形左下角的頂點、將x2、y2作為矩形右下角的頂點(將x1與x2比較,取較小的值作為x1,較大的值則作為x2。取y1同理)。

③:兩個矩形成功變形後,我們怎麼知道哪個矩形在前面?哪個矩形在後面呢?可以將最左邊的矩形作為a矩形(x1最小的矩形為a矩形)。

(為了方便描述分析,我將「變形」後的兩個矩陣分別稱為a矩形、b矩形)

變形後關係:

a矩形:x1a

a y1a

ab矩形:x1b

b y1bb

步驟二:判斷特殊情況(查漏)

①:面積無相交

a矩形的x2a小於b矩陣的x1b

a矩形的y2a小於b矩陣的y1b

a矩形的y1a大於b矩陣的y2b

②:矩形無面積

矩形**現x1=x2或y1=y2。

步驟三:計算相交面積(求解)

我們可以知道要求兩個矩形的相交面積,就要求△x、△y。

①:通過觀察當我們求△x時,我們要取兩個矩形中最小的x2,然後減去兩個矩形中最大的x1(這裡可以簡化計算,因為前面我們已經將有最小的x1a作為a矩形,這裡我們可以比較兩個矩形的x2,取最小作為x2小,然後減去b矩陣的x1b)。

△x=x2小-x1大

②:同理求△y時,我們可以取兩個矩形中最小的y2,然後減去兩個矩形中最大的y1。

△y=y2小-y1大

s=△x*△y

最後附上**:

#include

using namespace std;

#define ll long long

void

change

(double

*a,double

*b)int

main()

else

return0;

}

老鐵的關注是鼓勵我寫部落格的最大動力~

判斷圓和矩形是否相交(非面積相交)

題解。問題很簡單,給你乙個矩形和乙個圓,問你是否他們相交。注意,這裡的相交不是面積相交。也就是說,圓在矩形內 且不相切 是不相交的。或者矩形在圓內 且矩形的四個點不在圓上 也是不相交的。那麼,我們怎麼來判斷呢?中間輪廓線是矩形的邊,各向外和內距離為圓半徑r劃線 當然,四個角的肯定不太標準 如果圓心在...

判斷兩個矩形是否相交,相交區域面積

直接上 package companychukongkeji 兩個矩形都是平行於x,y軸,判斷是否相交。兩種方法,都需要檢查特殊情況。public class rectangleintersect if a.top b.bottom a.right b.left a.bottom b.top a.l...

基礎練習 矩形面積交

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