简体   繁体   English

计算矩形的交集

[英]Calculating intersection of rectangles

Im trying to create a program that takes in 4 values (xmin, ymin, xmax, ymax) for 2 rectangles, then calculate the (xmin, ymin, xmax, ymax) of the rectangle created by the two rectangles. 我试图创建一个程序,为2个矩形取4个值(xmin,ymin,xmax,ymax),然后计算由两个矩形创建的矩形的(xmin,ymin,xmax,ymax)。 Basically the only part I'm having trouble is with the intersection part. 基本上我遇到麻烦的唯一部分是交叉部分。

EDIT: Clarifying, It gives me an answer, it is just not the right answer. 编辑:澄清,它给了我一个答案,这不是正确的答案。 Punching in 1 1 4 4 and 2 2 5 5 gives me (1,1) (5,5), not the (2,2) (4,4) Im supposed to get. 在1 1 4 4和2 2 5 5中打孔给我(1,1)(5,5),而不是(2,2)(4,4)我应该得到。

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

int readRect(int *xmin, int *ymin, int *xmax, int *ymax);
int maxInt(int *val1, int *val2);
int minInt(int *val1, int *val2);

int main(){
int x = 0;
int y = 0;
int a,b,c,d;
int xmin1, ymin1, xmax1, ymax1;
int xmin2, ymin2, xmax2, ymax2;


for(;;){
printf(">>enter two rectangles:\n");
x = readRect(&xmin1, &ymin1, &xmax1, &ymax1);
y = readRect(&xmin2, &ymin2, &xmax2, &ymax2);
    if (y == x){
        if (x != 4){
            break;
        }else {
            printf("Rectangle 1: (%d, %d) (%d, %d)\n", xmin1, ymin1, xmax1, ymax1);
            printf("Rectangle 2: (%d, %d) (%d, %d)\n", xmin2, ymin2, xmax2, ymax2);
        }
        a = maxInt(&xmin1, &xmin2);
        b = minInt(&xmax1, &xmax2);
        c = maxInt(&ymin1, &ymin2);
        d = minInt(&ymax1, &ymax2);
        printf("%d %d %d %d\n", a,b,c,d);
        if ((a < b) && (c < d)) {
            printf("Intersection rectangle: (%d,%d)(%d,%d)\n", a,c,b,d);
        } else {
            printf("These two rectangles do not intersect\n");
        }
    }

}
return EXIT_SUCCESS;
}

int readRect(int *xmin, int *ymin, int *xmax, int *ymax){
int noItemsRead;
fflush(stdout);
noItemsRead = scanf("%d %d %d %d", xmin, ymin, xmax, ymax);

return noItemsRead;
}

int minInt(int *val1, int *val2){
if (val1 < val2){
    return *val1;
} else {
    return *val2;
}

}

int maxInt(int *val1, int *val2){
if (val1 > val2){
    return *val1;
} else {
    return *val2;
}
}

Every thing is fine except your functions maxInt and minInt . 除了你的函数maxIntminInt之外,一切都很好。 Replace if (val1 < val2) by if (*val1 < *val2) and if (val1 > val2) to if (*val1 > *val2) if (val1 < val2)替换为if (*val1 < *val2)并将if (val1 > val2)替换为if (*val1 > *val2)

int minInt(int *val1, int *val2){
    if (*val1 < *val2){
        return *val1;
    } 
    else {
        return *val2;
    }

}

int maxInt(int *val1, int *val2){
     if (*val1 > *val2){
         return *val1;
     } 
    else {
         return *val2;
}

Fixed my problem, it happens in the following lines, if I change: 解决了我的问题,它发生在以下几行,如果我改变:

int minInt(int *val1, int *val2){
if (val1 < val2){
    return *val1;
} else {
    return *val2;
}

}

int maxInt(int *val1, int *val2){
if (val1 > val2){
    return *val1;
} else {
    return *val2;
}
}

TO

int minInt(int *val1, int *val2){
if (*val1 < *val2){
    return *val1;
} else {
    return *val2;
}

}

int maxInt(int *val1, int *val2){
if (*val1 > *val2){
    return *val1;
} else {
    return *val2;
    }
}

Had to add the points when doing the logical comparison. 在进行逻辑比较时必须添加点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM