鱼C论坛

 找回密码
 立即注册
查看: 1726|回复: 0

[技术交流] 836_矩形重叠

[复制链接]
发表于 2019-6-18 15:51:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. /*
  2. 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
  3. 如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
  4. 给出两个矩形,判断它们是否重叠并返回结果。

  5. 示例 1:
  6. 输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
  7. 输出:true
  8. 示例 2:
  9. 输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
  10. 输出:false
  11. 说明:
  12.     两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。
  13.     矩形中的所有坐标都处于 -10^9 和 10^9 之间。
  14. */
复制代码




  1. /*
  2. * 基本思路:  x轴有交集 且 y 轴 有交集
  3. * 难点:   
  4. *    1.线段l1-[x1,x2] 和 线段l2-[x3,x4] 如何判断有无交集.
  5. *    2.进行符号判断时要进行防溢出处理.
  6. */
  7. bool isRectangleOverlap(int* rec1, int rec1Size, int* rec2, int rec2Size)
  8. {   
  9.     int flag1 = rec2[0] - rec1[2]; //(x3-x2);
  10.     int flag2 = rec2[2] - rec1[0]; //(x4-x1);
  11.     int flag3 = rec2[1] - rec1[3]; //(y3-y2);
  12.     int flag4 = rec2[3] - rec1[1]; //(y4-y1);
  13.    
  14.     if(flag1 == 0 || flag2 == 0 || flag3 == 0 || flag4 == 0) /* 可以直接判断没有交集*/
  15.     {
  16.         return false;
  17.     }
  18.     else
  19.     {
  20.         /* 防溢出,只取符号*/
  21.         flag1 = flag1 > 0 ? 1:-1;
  22.         flag2 = flag2 > 0 ? 1:-1;   
  23.         flag3 = flag3 > 0 ? 1:-1;   
  24.         flag4 = flag4 > 0 ? 1:-1;   
  25.     }
  26.     return (flag1*flag2<0 && flag3*flag4 < 0 );
  27. }
复制代码

  1. /*
  2. 执行用时 :4 ms, 在所有 C 提交中击败了93.94%的用户
  3. 内存消耗 :6.8 MB, 在所有 C 提交中击败了69.57%的用户
  4. */
复制代码



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表