W - Rectangles

Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have to calculate the area of the intersected part of two rectangles. its sides are parallel to OX and OY .
Input
Input The first line of input is 8 positive numbers which indicate the coordinates of four points that must be on each diagonal.The 8 numbers are x1,y1,x2,y2,x3,y3,x4,y4.That means the two points on the first rectangle are(x1,y1),(x2,y2);the other two points on the second rectangle are (x3,y3),(x4,y4).
Output
Output For each case output the area of their intersected part in a single line.accurate up to 2 decimal places.
Sample Input
1.00 1.00 3.00 3.00 2.00 2.00 4.00 4.00
5.00 5.00 13.00 13.00 4.00 4.00 12.50 12.50
Sample Output
1.00

56.25

题解:大意

给定两个矩形和两点对每个矩形的对角线的坐标,你必须计算相交的部分,两个矩形的面积。
输入的第一行是8个正数,表明四点必须在每个对角坐标。8个数分别为是X1,Y1,Y2,X2,X3,Y3,X4,y4,意味着第一个矩形的两个点(x1,y1),(x2,y2)一条对角线;第二矩形的两个点(X3,Y3)、(X4,Y4)一条对角线。
输出重叠的矩形面积,并保留两位小数。
首先明确的是,这样所给的对角线确定的矩形是唯一的,但对角线可能有两种方向,为方便廷议讨论,我们要做的是把对角线的方向统一为从左下到右上,然后判断有重叠矩形的条件:
1.从画图可知,如果x4>x1&&y4>y1&&x3<x2&&y3<y2,则有重叠矩形,且矩形的点也能确定出来,(x3,y1)(x2,y4)确定重叠矩形的从左到右的对角线,面积为:(y4-y2)*(x2-x3)
2.如不满足上述情况则为无重叠矩形,面积为0.00;
代码如下:
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double max(double a,double b)
{
    if(a>b)
        return a;
    else
        return b;
}
double min(double a,double b)
{
    if(a<b)
        return a;
    else
        return b;
}
int main()
{
    double x1,y1,x2,y2,x3,y3,x4,y4,t;
    while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF)
    {
    	//把对角线方向换成从左到右 
        if (x1>x2) t=x1,x1=x2,x2=t;
        if (y1>y2) t=y1,y1=y2,y2=t;
        if (x3>x4) t=x3,x3=x4,x4=t;
        if (y3>y4) t=y3,y3=y4,y4=t;
            x1=max(x1,x3);
            y1=max(y1,y3);
            x2=min(x2,x4);
            y2=min(y2,y4);
        //计算重叠矩形面积 
        if(x4>x1&&y4>y1&&x3<x2&&y3<y2) printf("%.2lf\n",(x2-x1)*(y2-y1));
        else printf("0.00\n");
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值