Python 3.x - 计算绘图&&计算坐标系中可能的正方形
Python 3.x - counting drawing&&counting the possible squares in a coordinate system
所以,现在,我有一个坐标系:
. . .
. . .
(x=0, y=0) (x=1, y=0) (x=2, y=0)
(x=0, y=1) (x=1, y=1) (x=2, y=1)
我们知道可以绘制 3 个矩形。
我们知道每个元素的坐标。 (在左上角它的 0,0 (x,y)) (在右下角它的 2,1 (x,y))
我们知道一个矩形有 4 个点,现在,它是:(x, y), (x2, y), (x, y2), (x2, y2) 所以,
(x, y) (x2, y)
(x, y2) (x2, y2)
我们知道矩形的面积大于0,所以x != x2 && y != y2
。
我们知道(在示例坐标系中)三个可绘制矩形的坐标是:
1,
0,0 1,0
0,1 1,1
2,
1,0 2,0
1,1 2,1
3,
0,0 2,0
0,1 2,1
现在,菱形不再出现了。
那么,如何在 Python 中获得解决方案(我希望解决方案是可绘制矩形的坐标。)?有人可以给我发代码或说明吗?我在互联网上找不到任何东西。当然,它必须使用具有更多坐标的坐标系。
我只在寻找 Python 代码。
一种非常简单但贪心的方法来计算和输出给定坐标系中矩形的数量如下。
首先,定义一个函数来检查四个点是否构成一个矩形:
def is_rectangle(a, b, c, d):
# sort coordinates
a, b, c, d = sorted([a, b, c, d])
# check rectangle
return a[0] == b[0] and c[0] == d[0] and a[1] == c[1] and b[1] == d[1]
然后,计算坐标系所有可能的四点组合中的矩形的函数:
def number_rectangles(coordinates):
# output the number of rectangles
return sum([is_rectangle(a, b, c, d) for (a, b, c, d) in itertools.combinations(coordinates, 4)])
最后,输出这些矩形坐标的方法是:
def get_rectangles(coordinates):
# return each rectangle
return [[a, b, c, d] for (a, b, c, d) in itertools.combinations(coordinates, 4) if is_rectangle(a, b, c, d)]
你的例子会得到什么:
coordinates = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
number_rectangles(coordinates)
# > 3
get_rectangles(coordinates)
# > [[(0, 0), (0, 1), (1, 0), (1, 1)],
# > [(0, 0), (0, 2), (1, 0), (1, 2)],
# > [(0, 1), (0, 2), (1, 1), (1, 2)]]
@Tibbles 给出的 向您展示了如何生成矩形。 计算 个(不生成它们!!)很容易,您只需要一些基本的数学运算:
rect_count = w * h * (w - 1) * (h - 1) / 4
其中 w
是 x
的最大值,h
是 `y 的最大值。
所以,现在,我有一个坐标系:
. . .
. . .
(x=0, y=0) (x=1, y=0) (x=2, y=0)
(x=0, y=1) (x=1, y=1) (x=2, y=1)
我们知道可以绘制 3 个矩形。
我们知道每个元素的坐标。 (在左上角它的 0,0 (x,y)) (在右下角它的 2,1 (x,y))
我们知道一个矩形有 4 个点,现在,它是:(x, y), (x2, y), (x, y2), (x2, y2) 所以,
(x, y) (x2, y)
(x, y2) (x2, y2)
我们知道矩形的面积大于0,所以x != x2 && y != y2
。
我们知道(在示例坐标系中)三个可绘制矩形的坐标是:
1,
0,0 1,0
0,1 1,1
2,
1,0 2,0
1,1 2,1
3,
0,0 2,0
0,1 2,1
现在,菱形不再出现了。
那么,如何在 Python 中获得解决方案(我希望解决方案是可绘制矩形的坐标。)?有人可以给我发代码或说明吗?我在互联网上找不到任何东西。当然,它必须使用具有更多坐标的坐标系。
我只在寻找 Python 代码。
一种非常简单但贪心的方法来计算和输出给定坐标系中矩形的数量如下。
首先,定义一个函数来检查四个点是否构成一个矩形:
def is_rectangle(a, b, c, d):
# sort coordinates
a, b, c, d = sorted([a, b, c, d])
# check rectangle
return a[0] == b[0] and c[0] == d[0] and a[1] == c[1] and b[1] == d[1]
然后,计算坐标系所有可能的四点组合中的矩形的函数:
def number_rectangles(coordinates):
# output the number of rectangles
return sum([is_rectangle(a, b, c, d) for (a, b, c, d) in itertools.combinations(coordinates, 4)])
最后,输出这些矩形坐标的方法是:
def get_rectangles(coordinates):
# return each rectangle
return [[a, b, c, d] for (a, b, c, d) in itertools.combinations(coordinates, 4) if is_rectangle(a, b, c, d)]
你的例子会得到什么:
coordinates = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
number_rectangles(coordinates)
# > 3
get_rectangles(coordinates)
# > [[(0, 0), (0, 1), (1, 0), (1, 1)],
# > [(0, 0), (0, 2), (1, 0), (1, 2)],
# > [(0, 1), (0, 2), (1, 1), (1, 2)]]
@Tibbles 给出的
rect_count = w * h * (w - 1) * (h - 1) / 4
其中 w
是 x
的最大值,h
是 `y 的最大值。