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

判断点是否在矩形内:支持矩形角点任意顺序输入的Python实现

任意输入顺序矩形点包含判定实现

问题背景

需要实现坐标点与矩形的包含关系判定逻辑,要求不受矩形对角点输入顺序限制:无论两个对角点以何种顺序传入,都能返回正确的判定结果。
原有实现存在逻辑错误无法正常工作,原代码如下:

def isIn(fc, sc, p):
    if (p[0] >= fc and p[0] <= sc and p[1] >= fc[1] and p[1] <= sc):
        return True
    elif (p[0] <= fc and p[0] >= sc and p[1] <= fc[1] and p[1] >= sc):
        return True
    else :
      return False
fc = (3, 4)
sc = (1, 2)
p = (1.5, 3.2)
print(solve(fc, sc, p))

原代码问题点

  • 类型比较错误:代码中出现p[0] >= fc这类单数值与坐标元组直接比较大小的写法,Python3环境下会直接抛出类型错误,无法运行
  • 分支覆盖不全:仅判断了两个角点x、y坐标同时大于/小于对方的场景,没有覆盖x、y大小关系交叉的对角点输入情况
  • 函数名不匹配:定义的函数名为isIn,调用时却写为solve,运行会触发名称错误

正确实现方案

核心逻辑不需要写多分支适配角点顺序,只需要先通过min/max函数自动计算出矩形x、y方向的最小、最大边界,再判断点坐标是否落在边界区间内即可,天然适配任意角点输入顺序。

def isIn(fc, sc, p):
    # 自动计算矩形x、y轴的边界值,和角点输入顺序无关
    x_left = min(fc[0], sc[0])
    x_right = max(fc[0], sc[0])
    y_bottom = min(fc[1], sc[1])
    y_top = max(fc[1], sc[1])
    # 判定点是否在闭区间内(包含落在矩形边上的点)
    return x_left <= p[0] <= x_right and y_bottom <= p[1] <= y_top

# 测试验证
fc = (3, 4)
sc = (1, 2)
p = (1.5, 3.2)
print(isIn(fc, sc, p))  # 输出True,符合预期

实现说明

  • 支持任意对角点输入顺序:无论是左上-右下、右上-左下还是其他顺序的两个对角点,都能正确计算边界
  • 逻辑简洁无冗余分支,执行效率高
  • 如果需要将落在矩形边上的点判定为不在范围内,只需要将判断条件中的<=替换为<即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:27:19