【问题标题】:how to get all coordinates in the rectangle between two coordinates?如何获取两个坐标之间矩形中的所有坐标?
【发布时间】:2019-06-19 13:42:07
【问题描述】:

假设我有一个矩形,它的左上角和右下角坐标分别是 A(0,0) 和 B(2,3)。有没有一种方法/公式可以用来获取这个矩形内的所有坐标?如果输入是这两个坐标,我希望我的输出是这样的:

input: [(0, 0), (2, 3)]
output: [(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1), (0, 2), (1, 2), (2, 2), (0, 3,) (1, 3,) (2, 3)]

另外,python 3 的实现将不胜感激,尽管不是必需的。

谢谢

编辑:全文:我正在使用 python,起初我认为我可以通过获取 x1 和 x2、y1 和 y2 之间的所有值来实现我想要的。所以例如我有 x = 0, x = 1, x = 2 和 y = 0, y = 1, y = 2, y = 3,但老实说我不知道​​从那里去哪里,或者如果这是首先是正确的。我想我可以通过某种方式获得所有坐标,y = 0 和不同的 x 值,然后是 y = 1 的所有坐标......但我似乎无法用一种方法来解决这个问题.任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 请发布您尝试过的内容..

标签: python-3.x geometry


【解决方案1】:

您可以做的一件事是列出矩形 [x1..x2] 内的所有 x 坐标和矩形 [y1..y2] 内的所有 y 坐标,然后取两个列表的笛卡尔积使用itertools:

import itertools
...
input = [(0, 0), (2, 3)]
x_coords = [x for x in range(input[0][0], input[1][0] + 1)]
y_coords = [y for y in range(input[0][1], input[1][1] + 1)]
output = list(itertools.product(x_coords, y_coords))

如果您不想使用itertools 来计算产品,您也可以轻松地使用for 循环或列表推导来代替它,这大致相当于itertools 在后面所做的无论如何场景:

output = [(x, y) for x in x_coords for y in y_coords]

【讨论】:

  • 谢谢,正是我想要的,它成功了!但还有一件事,您不必回答:我也可以使用 itertools 来处理 3d 坐标吗? (x, y , z) 如果不是,对于 for 循环解决方案是否相同,只是用 3 for 而不是 2?非常感谢,非常感谢您的帮助。
  • 是的,在这两种情况下。您可以将任意数量的列表传递给itertools.product(),它会为所有列表执行此操作。同样,您可以使用[(x, y, z) for x in x_coords for y in y_coords for z in z_coords],它也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
相关资源
最近更新 更多