从坐标列表中分配所有可能的顶点组合并对其进行缩放

时间:2018-11-17 05:28:50

标签: python python-3.x combinations

我正在使用Processing创建具有指定宽度和高度的四乘四的网格,如下所示。 enter image description here 我的最终目标是能够检查用户何时单击特定的正方形。在我的示例中,宽度和高度都将设置为480个单位,但是因此,我想以一种公式化的方式来做事情,而不是手动输入。

我最初的想法是获取网格中每个正方形的每个角的顶点,将其设置为变量名,然后使用一堆if条件来检查用户是否在有界区域内单击。这就是我到目前为止所拥有的。

WIDTH = 480
HEIGHT = 480

rows = [WIDTH * 0.0, WIDTH * 0.25, WIDTH * 0.50, WIDTH * 0.75, WIDTH * 1.00]
columns = [HEIGHT * 0.0, HEIGHT * 0.25, HEIGHT * 0.50, HEIGHT * 0.75, HEIGHT * 1.00]
coordinates = [(i, j) for i in rows for j in columns]

# "coordinates" is a list of tuples of all the vertices:
# [(0.0, 0.0), (0.0, 120.0), (0.0, 240.0), (0.0, 360.0), (0.0, 480.0), (120.0, 0.0), (120.0, 120.0), (120.0, 240.0), (120.0, 360.0), (120.0, 480.0), ...]

所以我能够获得每个可能顶点的元组列表,现在我想将它们全部分配给变量。

例如,对于第1行,第1列(网格的左上角正方形),用户将需要单击小于(0, 120) and (120, 0)但大于(0,0) and (0,0)的区域。这些是将网格的左上角正方形归为顶点的顶点。我会为每个广场做这个。

我可以给每个顶点一个变量名。例如,(0, 0)可以是vertex_one(0, 120)可以是vertex_two,依此类推。我知道如何遍历元组列表,但是我不知道如何在迭代时将它们分配给名为vertex_n的变化字符串-其中n代表顶点号。

但是我从this线程中了解到,这样做显然不是一个好主意。因此,现在我不知道是否应该手动输入每个顶点,或者是否有更多的编程/自动方式来执行此操作,例如查找字典。因为当网格变大时,这将要求我手动键入更大数量的顶点,这是不希望的。

任何关于我应该采用哪种方法的想法和建议,将不胜感激!

1 个答案:

答案 0 :(得分:1)

  

我可以给每个顶点一个变量名

即使每个顶点都有变量,您也需要知道点击坐标位于“顶点”上方的哪个顶点。因此,我认为您不会从他们那里得到太多使用。您只需要单击鼠标的位置,然后根据该位置执行数学运算即可。

由于我不知道处理库,所以不确定如何收集点击,但是一旦获得坐标,这是一个非常简单的除法问题

CELL_WIDTH = 120

def get_cell(x, y):
    global CELL_WIDTH
    return {"col":x // CELL_WIDTH, "row": y // CELL_WIDTH}

样品

print(get_cell(0, 0))     # col=0, row=0
print(get_cell(0, 119))   # col=0, row=0
print(get_cell(0, 120))   # col=0, row=1
print(get_cell(120, 120)) # col=1, row=1
print(get_cell(120, 240)) # col=1, row=2