我正在使用Processing创建具有指定宽度和高度的四乘四的网格,如下所示。 我的最终目标是能够检查用户何时单击特定的正方形。在我的示例中,宽度和高度都将设置为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线程中了解到,这样做显然不是一个好主意。因此,现在我不知道是否应该手动输入每个顶点,或者是否有更多的编程/自动方式来执行此操作,例如查找字典。因为当网格变大时,这将要求我手动键入更大数量的顶点,这是不希望的。
任何关于我应该采用哪种方法的想法和建议,将不胜感激!
答案 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