hdu2056 Rectangles(矩形重疊)
阿新 • • 發佈:2018-12-18
設以線段P1P2作為矩形R的對角線,以Q1Q2為矩形T的對角線,若矩形R和T不相交,則線段不會相交。
設P1 = (x1,y1), P2 = (x2, y2), Q1 = (x3, y3), Q2 = (x4, y4);
將矩形R的x座標的最小邊界用minRX = (x1, x2)表示,以此類推。
若兩矩形相交,設為矩形F。則矩形F的x座標的最小邊界minFX = max(minRX, minTX), minFY = max(minRY, minTY),
maxFX = min(maxRX, maxTX), maxFY = min(maxFY, maxTY).
得到F的各個值後,只要判斷矩形F是否成立就可以判斷是否相交了, 若minFX > maxFX, 或minFY > maxFY則矩形不相交,否則相交。
AC程式碼如下:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; double _max(double x, double y) { if(x > y) return x; else return y; } double _min(double x, double y) { if(x < y) return x; else return y; } int main() { double x1, y1, x2, y2, x3, y3, x4, y4, area; while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4) != EOF) { double minRX = min(x1, x2), minRY = min(y1, y2), maxRX = max(x1, x2), maxRY = max(y1, y2); double minTX = min(x3, x4), minTY = min(y3, y4), maxTX = max(x3, x4), maxTY = max(y3, y4); x1 = _max(minRX, minTX), x2 = _min(maxRX, maxTX); y1 = _max(minRY, minTY), y2 = _min(maxRY, maxTY); if(x1 > x2 || y1 > y2) area = 0.0; else { double a = x2 - x1, b = y2 - y1; area = a*b; } printf("%.2f\n", area); } return 0; }