两矩形并面积

本文介绍了一种通过判断两个矩形是否重叠,并计算重叠部分面积的方法。利用坐标信息确定矩形的位置与大小,进而实现矩形重叠情况的分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击:题目链接

线段重叠,推矩形重叠 

AC代码:

#include<iostream>
#include<map>
using namespace std;
struct node{
	int x, y;
	int x1, y1;
}; 

bool isR(node a, node b){
	if(max(a.x, b.x) < min(a.x1, b.x1) && max(a.y, b.y) < min(a.y1, b.y1))
	return true;
	return false;
}
int main(){
	node ret[2];
	int ans = 0;
	for(int i = 0; i < 2;i ++){
		cin >> ret[i].x >> ret[i].y >> ret[i].x1 >> ret[i].y1;
		int lenx = ret[i].x1 - ret[i].x;
		int leny = ret[i].y1 - ret[i].y;
		ans += lenx * leny;
	}
	if(isR(ret[0], ret[1])){
		int a = (ret[0].x1 < ret[1].x1 ? ret[0].x1 : ret[1].x1);
		int b = (ret[0].x > ret[1].x ? ret[0].x : ret[1].x);
		int len = a - b;
		int high =  (ret[0].y1 < ret[1].y1 ? ret[0].y1 : ret[1].y1) - (ret[0].y > ret[1].y?ret[0].y : ret[1].y);
		cout << ans - (len * high) << endl;
	}else{
		cout << ans << endl;
	}
	return 0;
} 

 

### C++ 计算矩形的重叠面积 对于矩形之间重叠面积的计算,可以通过分析矩形的位置关系利用几何方法得出结果。当考虑的是边平行于坐标轴的情况时,逻辑相对简单。 #### 判断是否有重叠区域 为了确定是否存在重叠部分,需要检查一个矩形的最大X/Y值是否小于另一个矩形最小X/Y值;如果存在这样的情况,则说明这矩形不相交[^1]。 ```cpp bool isOverlap(int A, int B, int C, int D, int E, int F, int G, int H){ // (A,B)(E,F) 是左上角; (C,D)(G,H) 是右下角. if(C <= E || G <= A || D <= F || H <= B) return false; else return true; } ``` #### 计算实际重叠面积 一旦确认了矩形确实发生了交叉,那么就可以通过下面的方法来获取它们共同覆盖的空间大小: - 找到重叠区间的宽度:`min(右边界的最大值)-max(左边界的最小值)` - 同样地找到高度:`min(顶部边界的最大值)-max(底部边界的最小值)` - 将上述者相乘即得到最终的结果[^3] ```cpp int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { bool overlap = isOverlap(A, B, C, D, E, F, G, H); if (!overlap) return 0; int width_overlap = min(C,G) - max(A,E); int height_overlap = min(D,H) - max(B,F); return width_overlap * height_overlap; } ``` 此段代码实现了基本的功能需求,但对于更复杂的场景比如倾斜角度不同的矩形则需采用其他策略如变换至标准位置再做判断等操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值