【C语言】之''矩形相交''

老师平时布置的希冀系统上的作业答案,仅供参考!

【问题描述】

平面上有两个矩形A和B,其位置是任意的。编程求出其相交部分(如图中阴影部分)的面积。

题目

【输入形式】

从标准输入读取两行以空格分隔的整数,格式如下:

Ax1 Ay1 Ax2 Ay2
Bx1 By1 Bx2 By2

其中(x1,y1)和(x2,y2)为矩形对角线上端点的坐标。各坐标值均为整数,取值在0至1000之间。

【输出形式】

向标准输出打印一个整数,是两矩形相交部分的面积(可能为0)。

【输入样例】

0 0 2 2
1 1 3 4

【输出样例】

1

提示:输入的两点可以是矩形任一对角线上的端点,求相交的面积可以先求矩形在X轴和Y轴上的交集。矩形在X轴上的交集可以按照如下算法进行求解:假设AX1和AX2中的较大值为MAX_AX,较小值为MIN_AX;BX1和BX2中的较大值为MAX_BX,较小值为MIN_BX。用MAX_AX和MAX_BX中的较小者减去MIN_AX和MIN_BX中的较大者,结果为正表示两矩形在X轴上的交集,若为负则表示不相交

【参考答案】

#include <stdio.h>
int max(int m,int n)
{
    if(m>n)
        return m;
    else
        return n;
}
int min(int m,int n)
{
    if(m>n)
        return n;
    else
        return m;
}
int main()
{
    int x1,x2,x3,x4,y1,y2,y3,y4,a,b,c,d,e,f,g,h,i,j,k,l;
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
    a=max(y1,y2);
    b=min(y1,y2);
    c=max(y3,y4);
    d=min(y3,y4);
    e=max(x1,x2);
    f=min(x1,x2);
    g=max(x3,x4);
    h=min(x3,x4);
    i=min(a,c);
    j=max(b,d);
    k=min(e,g);
    l=max(f,h);
    if((i-j)>0&&(k-l)>0)
        printf("%d",(i-j)*(k-l));
    else
        printf("0");
    return 0;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容