如何获取矩形两对角顶点间的所有坐标?附Python实现需求
获取矩形内所有整数坐标点的方法与Python实现
思路解析
你的初始思路完全正确!要生成矩形内的所有整数坐标点,核心就是两步:
- 明确x轴的取值范围:取两个顶点x坐标的最小值到最大值(包含两端),比如示例里的0、1、2。
- 明确y轴的取值范围:同理取两个顶点y坐标的最小值到最大值(包含两端),也就是示例里的0、1、2、3。
- 最后把每个x值和每个y值做笛卡尔积组合,就能得到所有符合要求的坐标点了。
具体实现(Python 3)
这里提供几种不同风格的实现,你可以按需选择:
方法1:嵌套循环(最直观易懂)
用两层循环逐个遍历x和y的取值,手动收集坐标点:
def get_rectangle_points(top_left, bottom_right): x1, y1 = top_left x2, y2 = bottom_right # 确定x、y的范围,注意range是左闭右开,所以最大值要+1才能包含进去 x_start, x_end = min(x1, x2), max(x1, x2) y_start, y_end = min(y1, y2), max(y1, y2) points = [] # 先遍历y再遍历x,和示例输出的顺序一致 for y in range(y_start, y_end + 1): for x in range(x_start, x_end + 1): points.append((x, y)) return points # 测试示例 input_points = [(0, 0), (2, 3)] print(get_rectangle_points(*input_points)) # 输出:[(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1), (0, 2), (1, 2), (2, 2), (0, 3), (1, 3), (2, 3)]
方法2:用itertools.product简化代码
Python标准库的itertools.product可以直接生成笛卡尔积,代码更简洁:
from itertools import product def get_rectangle_points(top_left, bottom_right): x1, y1 = top_left x2, y2 = bottom_right x_min, x_max = sorted([x1, x2]) y_min, y_max = sorted([y1, y2]) # 直接生成所有x和y的组合,转成列表返回 return list(product(range(x_min, x_max + 1), range(y_min, y_max + 1))) # 测试示例 input_points = [(0, 0), (2, 3)] print(get_rectangle_points(*input_points)) # 输出和上面完全一致
方法3:列表推导式(一行搞定)
如果喜欢紧凑的写法,用列表推导式也能实现:
def get_rectangle_points(top_left, bottom_right): x1, y1 = top_left x2, y2 = bottom_right x_min, x_max = min(x1, x2), max(x1, x2) y_min, y_max = min(y1, y2), max(y1, y2) return [(x, y) for y in range(y_min, y_max + 1) for x in range(x_min, x_max + 1)] # 测试示例 input_points = [(0, 0), (2, 3)] print(get_rectangle_points(*input_points))
补充说明
- 上面的代码都兼容任意对角顶点的输入,哪怕你把右下角和左上角反过来传,也能得到正确结果。
- 如果需要非整数坐标点(比如每隔0.1取一个点),可以把
range换成numpy.arange或者自定义步长的循环,根据你的精度需求调整即可。
内容的提问来源于stack exchange,提问作者neckslicer
相关产品推荐
相关产品推荐

