蓝桥杯 矩形面积交

因为自己想了好久,没有想出来,就想着去借鉴别人的当时看了不少题解,自己当时也想到有什么矩形面积交的公式,不过看到浙大柳神的思路,十分简洁,也能看懂。下面放上代码和相关思路

#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;
}

先将四个矩形顶点都变为左下角对右下角,然后判断当前的输入是否是两个矩形不相交情况的,相交的话,就分别对横坐标,纵坐标分别排序。横纵坐标都取中间两个,相乘即可得到相交矩形面积

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值