因为自己想了好久,没有想出来,就想着去借鉴别人的当时看了不少题解,自己当时也想到有什么矩形面积交的公式,不过看到浙大柳神的思路,十分简洁,也能看懂。下面放上代码和相关思路
#include <bits/stdc++.h> //蓝桥 矩形面积交:一定要自己清楚整个算法的流程
//关键是判断矩形相交的算法,然后再计算机出其相交区域面积
using namespace std;
double x1,x2,x3,x4,y_1,y_2,y_3,y_4; //分开两行声明就编译不过
int main()
{
scanf("%lf %lf %lf %lf",&x1,&y_1,&x2,&y_2);
scanf("%lf %lf %lf %lf",&x3,&y_3,&x4,&y_4);
//将四个矩形点都转换成左下角对右上角
if(x1>x2)
swap(x1,x2);
if(y_1>y_2)
swap(y_1,y_2);
if(x3>x4)
swap(x3,x4);
if(y_3>y_4)
swap(y_3,y_4);
if(x2<x3 || x4<x1 || y_2<y_3 || y_4<y_1) //四种不相邻的情况
{
cout<<"0.00";
return 0;
}
double a[4] = {x1,x2,x3,x4}; //竟然一开始不知道怎么对这四个数进行排序(看了下柳神的实现代码瞬间醒悟)
double b[4] = {y_1,y_2,y_3,y_4};
sort(a,a+4); //默认升序
sort(b,b+4);
printf("%.2lf",(a[2]-a[1]) * (b[2]-b[1]));
return 0;
}
先将四个矩形顶点都变为左下角对右下角,然后判断当前的输入是否是两个矩形不相交情况的,相交的话,就分别对横坐标,纵坐标分别排序。横纵坐标都取中间两个,相乘即可得到相交矩形面积