基础训练:矩形面积交
【摘要】 本题思考
最开始我是分情况讨论各种相交的情况,发现判断语句写的非常繁琐,容易漏掉情况。其实这道题最简单的做法是: (1)找出不相交的通用判断方法 当一个矩形的横(纵)坐标的最大值小于另一矩形横(纵)坐标的最小值时,不相交 (2)找出相交情况面积的通用计算方法 相交的形状是个长方形,因此只需要计算长和宽。计算长:将四个横坐标升序排序,第三个减去第二个;同样的方法计算宽。...
本题思考
最开始我是分情况讨论各种相交的情况,发现判断语句写的非常繁琐,容易漏掉情况。其实这道题最简单的做法是:
(1)找出不相交的通用判断方法
当一个矩形的横(纵)坐标的最大值小于另一矩形横(纵)坐标的最小值时,不相交
(2)找出相交情况面积的通用计算方法
相交的形状是个长方形,因此只需要计算长和宽。计算长:将四个横坐标升序排序,第三个减去第二个;同样的方法计算宽。
完成上面两步,我们的编程逻辑就会变得非常清晰,一个if/else判断语句即可实现。
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
程序清单:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ double x[4],y[4]; //依次输入矩形坐标 cin>>x[0]>>y[0]>>x[1]>>y[1]>>x[2]>>y[2]>>x[3]>>y[3]; //判断不相交条件 if(max(x[0],x[1])<=min(x[2],x[3])||max(x[2],x[3])<=min(x[0],x[1])||max(y[0],y[1])<=min(y[2],y[3])||max(y[2],y[3])<=min(y[0],y[1])) cout<<"0.00";//不相交面积为0 else{ sort(x,x+4);//升序排序 sort(y,y+4); double length=x[2]-x[1];//中间的两个作差 double width=y[2]-y[1]; printf("%.2lf",length*width);//计算面积 } return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
这里也提供另一种方法,原理和上面一样。
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
double A[4]={0};
double B[4]={0};
for(int i=0;i<4;i++) //输入矩形A
cin>>A[i];
for(int i=0;i<4;i++) //输入矩形B
cin>>B[i]; double x[4]={A[0],A[2],B[0],B[2]}; //将所有的横坐标存入数组x,等待排序
double y[4]={A[1],A[3],B[1],B[3]}; //将所有的纵坐标存入数组y,等待排序 double max_Ax=max(A[0],A[2]);
double max_Ay=max(A[1],A[3]);
double max_Bx=max(B[0],B[2]);
double max_By=max(B[1],B[3]); double min_Ax=min(A[0],A[2]);
double min_Ay=min(A[1],A[3]);
double min_Bx=min(B[0],B[2]);
double min_By=min(B[1],B[3]);
//当一个矩形横(纵)坐标的最大值小于另一矩形横(纵)坐标的最小值时,不相交。
if(max_Ax<=min_Bx||max_Ay<=min_By||max_Bx<=min_Ax||max_By<=min_Ay)
cout<<0.00<<endl;
else
{
sort(x,x+4); //将数组x按升序排列
sort(y,y+4);
double width=x[2]-x[1]; //相交面积的长
double height=y[2]-y[1]; //相交面积的
cout<<setiosflags(ios::fixed)<<setprecision(2)<<width*height<<endl;
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。
原文链接:ai-wx.blog.csdn.net/article/details/104659068
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)