标签:
seeyou
题目大意:给你两个矩形对角线两端的坐标,输出这两个矩形的相交面积
思路:假设两个矩形相交,则相交的矩形面积横坐标为四个横坐标中间的
两个横坐标,纵坐标为四个纵坐标中间的两个纵坐标,然后计算面积。若
两个矩形不相交,则相交面积为0.00。
那么怎么判断是否相交呢。思路很简单,分别计算出矩形1和矩形2最小和
最大和横、纵坐标,若矩形1的最小横坐标>=矩形2的最大横坐标 或者
矩形1的最大横坐标<=矩形2的最小横坐标 则两个矩形不可能相交,同理,
纵坐标也是如此。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
    double x[5],y[5],x1,x2,y1,y2;
    double Minx1,Minx2,Miny1,Miny2,Maxx1,Maxx2,Maxy1,Maxy2;
    while(cin >> x[0] >> y[0] >> x[1] >> y[1] >> x[2] >> y[2] >> x[3] >> y[3])
    {
        Minx1 = min(x[0],x[1]);
        Minx2 = min(x[2],x[3]);
        Miny1 = min(y[0],y[1]);
        Miny2 = min(y[2],y[3]);
        Maxx1 = max(x[0],x[1]);
        Maxx2 = max(x[2],x[3]);
        Maxy1 = max(y[0],y[1]);
        Maxy2 = max(y[2],y[3]);
        if(Minx1>=Maxx2||Maxx1<=Minx2||Miny1>=Maxy2||Maxy1<=Miny2)
        {
            printf("0.00\n");
            continue;
        }
        sort(x,x+4);
        sort(y,y+4);
        x1 = x[1];
        x2 = x[2];
        y1 = y[1];
        y2 = y[2];
        double S = fabs((y1-y2)*(x1-x2));
        printf("%.2lf\n",S);
    }
    return 0;
}
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/42361951