You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过两个矩形的左上、右下顶点坐标判断二者是否相交

矩形相交判断方法(边/角接触均判定为相交)

前置约定

先统一坐标规则,保证判断逻辑通用:

  • 对任意矩形,左上顶点坐标为(x1, y1),右下顶点坐标为(x2, y2),强制满足x2 > x1
  • 两个矩形使用同一套坐标系即可,无论y轴是向上(数学坐标系)还是向下(屏幕坐标系),只要保证同一矩形的y2在对应坐标系规则下大于y1即可

核心判断逻辑

用反向排除法实现更简单,不容易出错:先找出所有「两个矩形一定不相交」的情况,只要不满足任意一种不相交情况,就属于相交范畴。
两个矩形一定不相交的4种充分条件,满足任意一种即可判定为不相交:

  • 矩形A整体在矩形B左侧:A.x2 < B.x1
  • 矩形A整体在矩形B右侧:A.x1 > B.x2
  • 矩形A整体在矩形B上方:A.y2 < B.y1
  • 矩形A整体在矩形B下方:A.y1 > B.y2
    也就是说,只有当以上4个条件全部不成立时,两个矩形相交,完全符合「边接触、角点接触均算相交」的要求。

代码示例

以下是Python实现的判断函数:

def is_intersect(rect_a, rect_b):
    # rect参数格式为 (x1, y1, x2, y2),需满足x2>x1、y2>y1
    a_x1, a_y1, a_x2, a_y2 = rect_a
    b_x1, b_y1, b_x2, b_y2 = rect_b
    # 满足任意不相交条件返回False,否则返回True
    if a_x2 < b_x1 or a_x1 > b_x2 or a_y2 < b_y1 or a_y1 > b_y2:
        return False
    return True

边界场景验证

  • 边接触场景:矩形A右边界为10,矩形B左边界为10,纵向范围存在重叠,此时A.x2 < B.x1即10 < 10不成立,函数返回True,符合相交判定规则
  • 角点接触场景:矩形A右下顶点为(10, 10),矩形B左上顶点为(10, 10),四个不相交条件全部不成立,函数返回True,符合相交判定规则
  • 完全错开场景:矩形A右边界为9,矩形B左边界为10,此时A.x2 < B.x1成立,函数返回False,符合预期

内容的提问来源于stack exchange,提问作者Max Aquino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:09:02