本人為一名普通二本學校自動化專業的大二學生,對程式設計有著少許興趣。致力將演算法寫得更加通俗易懂。
該題主要考查了判斷、線段交,只要能夠將矩形之間的關係弄清楚題目就會變得很簡單。
題目「對於每個矩形,我們給出它的一對相對頂點的座標」,這也告訴了我們它的特殊情況會有很多,如果直接將資料記錄下來然後就開始計算面積,無疑難度會很大,那我們有什麼方法能夠將資料「變形」到我們希望的樣子呢?
步驟一:變形(化簡題目)
①:通過觀察可以得到每一行代表矩形的相對定點座標(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的實數表示。輸出格式 輸出僅...