c0306_求两矩阵的相交面积


【问题描述】
平面上有两个矩形A和B,其位置是任意的。编程求出其相交部分(如图中阴影部分)的面积。(0≤a,b≤1000)

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

Ax1 Ay1 Ax2 Ay2
Bx1 By1 Bx2 By2

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

【输出形式】
向标准输出打印一个整数,是两矩形相交部分的面积(可能为0)。在输出末尾要有一个回车符。
【输入样例】
0 0 2 2
1 1 3 4

【输出样例】
1

-----------------

个人代码:

#include <stdio.h>

int main(){
    int ax1,ay1,ax2,ay2,bx1,by1,bx2,by2;
    int i,j,temp,area=0;
    scanf("%d %d %d %d",&ax1,&ay1,&ax2,&ay2);
    scanf("%d %d %d %d",&bx1,&by1,&bx2,&by2);
    if(ax1>ax2){
        temp = ax1;
        ax1 = ax2;
        ax2 = temp;
    }
    if(ay1>ay2){
        temp = ay1;
        ay1 = ay2;
        ay2 = temp;
    }
    if(bx1>bx2){
        temp = bx1;
        bx1 = bx2;
        bx2 = temp;
    }
    if(by1>by2){
        temp = by1;
        by1 = by2;
        by2 = temp;
    }
    if(ax2>=bx1 && ax1<=bx2 && ay2>=by1 && ay1<=by2)
        area = (ax2-bx1)*(ay2-by1);
    printf("%d\n",area);
    getchar();
    return 0;

}

标答:

#include <stdio.h>
#include <stdlib.h>

struct point {
    int x;
    int y;
}A1,A2,B1,B2;

struct rect {
    struct point p1;
    struct point p2;
}R1,R2;

struct point makepoint(int x,int y);
struct rect makerect(struct point p1,struct point p2);
struct rect guifanrect(struct rect R);

#define max(A,B) ((A)>(B)?(A):(B))
#define min(A,B) ((A)>(B)?(B):(A))

main()
{
    int i,num1[4],num2[4],area;

    for(i=0;i<4;i++)
        scanf("%d",&num1[i]);
    for(i=0;i<4;i++)
        scanf("%d",&num2[i]);

    R1 = makerect(A1 = makepoint(num1[0],num1[1]),
        A2 = makepoint(num1[2],num1[3]));
    R2 = makerect(B1 = makepoint(num2[0],num2[1]),
        B2 = makepoint(num2[2],num2[3]));

    R1 = guifanrect(R1);
    R2 = guifanrect(R2);

    if( R1.p2.x <= R2.p1.x || R1.p2.y <= R2.p1.y || 
        R1.p1.x >= R2.p2.x || R1.p1.y >= R2.p2.y)
        area = 0;
    else
        area = abs(max(R1.p1.x, R2.p1.x) - min(R1.p2.x, R2.p2.x)) * 
                abs(max(R1.p1.y, R2.p1.y) - min(R1.p2.y, R2.p2.y));

    printf("%d\n",area);
}

struct point makepoint(int x,int y)
{
    struct point temp;

    temp.x = x;
    temp.y = y;
    return temp;
}

struct rect makerect(struct point p1,struct point p2)
{
    struct rect temp;

    temp.p1 = p1;
    temp.p2 = p2;
    return temp;
}

struct rect guifanrect(struct rect r)
{
    struct rect temp;
    temp.p1.x = min (r.p1.x, r.p2.x);
    temp.p1.y = min (r.p1.y, r.p2.y);
    temp.p2.x = max (r.p1.x, r.p2.x);
    temp.p2.y = max (r.p1.y, r.p2.y);
    return temp;
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM