判断点是否在矩形内:支持矩形角点任意顺序输入的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
相关产品推荐
相关产品推荐

