首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 2056: Rectangles - 矩形相交面積幾何解法

     編輯:關於C++

問題描述

給定兩矩形的對角線端點座標,求相交面積。多組輸入,輸出保留兩位小數。

核心思路

對每個矩形,分別求出 x 的最小/最大值、y 的最小/最大值,得到標準化的 [xmin, xmax] × [ymin, ymax]。
相交區間:x_overlap = [max(xmin1, xmin2), min(xmax1, xmax2)],同理 y。
若 x_overlap_min > x_overlap_max 或 y 同理,則不相交,面積 0。
否則面積 = (x_overlap_max - x_overlap_min) * (y_overlap_max - y_overlap_min)。

代碼

#include <bits/stdc++.h>
using namespace std;
int main() {
    double x1,y1,x2,y2,x3,y3,x4,y4;
    while (cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4) {
        double xa1 = min(x1,x2), xa2 = max(x1,x2);
        double ya1 = min(y1,y2), ya2 = max(y1,y2);
        double xb1 = min(x3,x4), xb2 = max(x3,x4);
        double yb1 = min(y3,y4), yb2 = max(y3,y4);
        double xl = max(xa1, xb1), xr = min(xa2, xb2);
        double yl = max(ya1, yb1), yr = min(ya2, yb2);
        double area = 0;
        if (xl < xr && yl < yr) area = (xr - xl) * (yr - yl);
        printf("%.2f\n", area);
    }
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved