这题就是简单的几何题,刚接触ACM做这题时,不会写,当时想的太复杂了,把矩形的各种情况组合都考虑到了,结果发现这样太复杂就放弃了。今天做这道题时,我突然发现既然题目给的是对角线的坐标,为什么不用对角线之间的关系来判别矩形之间的位置关系呢?于是思路就很简单的涌现出来了。只要画个图,就能明白两者之间对角线的关系。
#include<cstdio> #include<cstring> #include<algorithm> double _max(double x,double y) { if(x>y) return x; return y; } double _min(double x,double y) { if(x<y) return x; return y; } using namespace std; int main() { double x1,y1,x2,y2,x3,y3,x4,y4,area; while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF) { double _x1=_min(x1,x2),_x2=_max(x1,x2),_y1=_min(y1,y2),_y2=_max(y1,y2);//分别求出矩形对角线两个点的x,y的最大最小值 double _x3=_min(x3,x4),_x4=_max(x3,x4),_y3=_min(y3,y4),_y4=_max(y3,y4); x1=_max(_x1,_x3),x2=_min(_x2,_x4);//把两条对角线进行比较 y1=_max(_y1,_y3),y2=_min(_y2,_y4); //printf("x1=%lf,x2=%lf,y1=%lf,y2=%lf\n",x1,x2,y1,y2); if(x1>x2||y1>y2) area=0.0; else { double a=x2-x1,b=y2-y1; area=a*b; } printf("%.2lf\n",area); } return 0; }
时间: 2024-10-16 09:52:56