单位建设网站,中国风 wordpress主题,门户网站推广怎么做,八上数学优化设计答案题目链接#xff1a;
0矩形总面积 - 蓝桥云课 (lanqiao.cn)
说明#xff1a;
参考文章#xff1a;矩形总面积计算器#xff1a;计算两个矩形的总面积#xff0c;包括重叠区域_矩形r1的左下角坐标为x1, yl 、宽度为w1、高度为h1, 矩形r2的左下角坐标为x2,y2、宽-CSDN博客…题目链接
0矩形总面积 - 蓝桥云课 (lanqiao.cn)
说明
参考文章矩形总面积计算器计算两个矩形的总面积包括重叠区域_矩形r1的左下角坐标为x1, yl 、宽度为w1、高度为h1, 矩形r2的左下角坐标为x2,y2、宽-CSDN博客
看似简单实际如果一种一种列举情况写if-else还挺麻烦的。首先很容易看出的是两矩形不相交的情况
x[4]x[1]||x[3]x[2]||y[3]y[2]||y[4]y[1]
以及一者包含另一者的情况x[3]x[1]x[4]x[2]y[3]y[1]y[4]y[2]、x[3]x[1]x[4]x[2]y[3]y[1]y[4]y[2]
但是两者相交的情况如果要用列举出来情况非常多至少以下这么多种情况黑色为R1其他颜色为R2 所以需要考虑找规律。
按照参考文章的思路我们需要找到高效率确定重叠区域的方法二维图形不好想象首先从两条直线来考虑重叠区域: 由图可知右边界是两条直线右边界的较小值左边界是两条直线左边界的较大值在两个矩形的重叠区域的x方向上也是满足的。如果没有重叠区域那么找出的左边界将会大于右边界。
由这个方法也可以找到y方向上的上下边界由此就可以计算出重叠区域的面积但要判断一下区域是否存在也就是判断边界差值是否大于0。 代码
#includebits/stdc.h
#define int long long
using namespace std;
const int N 1e9;
int ans 0;
int x[5],y[5]; signed main() {cin.tie(0);cout.tie(0);for(int i1;i5;i){cinx[i]y[i];}int s1(y[4]-y[3])*(x[4]-x[3]),s2(y[2]-y[1])*(x[2]-x[1]);int l,r;lmin(x[2],x[4])-max(x[1],x[3]) ;rmin(y[2],y[4])-max(y[1],y[3]);if(l0r0){anss1s2-l*r;}else{anss1s2;}cout ans;return 0;
}