White--Night 2021-12-03 18:26 采纳率: 100%
浏览 54
已结题

两个矩形是否相交的结果判断出错

问题遇到的现象和发生背景

判断两个矩形是否相交,若相交则输出yes,不然则输出no。
这个代码好像不能判断所有两个矩形不相交的情况,但一直找不到是哪种情况。

问题相关代码,请勿粘贴截图

#include <stdio.h>

int main(){
int t;
int x1,y1,x2,y2,x3,y3,x4,y4;
int i;

scanf("%d",&t);
for(i=1;i<=t;i++){
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
    
    if(x1==x3&&x2==x4&&y1<y3&&y2<y4||x1==x3&&x2==x4&&y3<y1&&y4<y2){
        printf("NO\n");
    }else if(y1==y3&&y2==y4&&x1<x3&&x2<x4||y1==y3&&y2==y4&&x3<x1&&x4<x2){
        printf("NO\n");
    }else if(x2==x3&&y2==y3||x1==x4&&y1==y4||x2==x3&&y1==y4||x1==x4&&y2==y3){
        printf("YES\n");
    }else if(x1<x3&&x2<x4&&y1<y3&&y2<y4||x3<x1&&x4<x2&&y3<y1&&y4<y2||x2==x3){
        printf("NO\n"); 
    }else{
        printf("YES\n");
    }

}
return 0;
}

运行结果及报错内容

其中一组正确判断情况的输出结果:
3
0 0 10 10
11 11 20 20
NO
10 10 15 15
8 13 13 20
YES
4 4 20 20
20 20 30 30
YES

我的解答思路和尝试过的方法
我想要达到的结果

判断所有两个矩形不相交的情况

  • 写回答

1条回答 默认 最新

  • xuzuning 2021-12-04 13:11
    关注
    int x01 , x02 , y01 , y02 ;
    int x11 , x12 , y11 , y12 ;
    scanf("%d %d %d %d" ,&x01 ,&y01 ,&x02 , &y02) ;
    scanf("%d %d %d %d" ,&x11 , &y11 , &x12 , &y12) ;
    int zx = ab(x01+x02-x11-x12) ; //两个矩形重心在x轴上的距离的两倍
    int x = ab(x01-x02)+ab(x11-x12) ; //两矩形在x方向的边长的和
    int zy = ab(y01+y02-y11-y12) ;   //重心在y轴上距离的两倍
    int y = ab(y01-y02)+ab(y11-y12) ; //y方向边长的和
    if(zx <= x && zy <= y)
    printf("YES\n") ;
    else printf("NO\n") ;
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 创建了问题 12月3日

悬赏问题

  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私