4

我正在使用 Zelle 的 Python 图形库,我需要一些帮助来创建一个算法来返回列表中的数字。

基本上我有 5x7 板分成 100x100 像素网格。这与这样的列表相对应。

| 0| 1| 2| 3| 4|  
| 5| 6| 7| 8| 9|  
|10|11|12|13|14|  
|15|16|17|18|19|  
|20|21|22|23|24|  
|25|26|27|28|29|  
|30|31|32|33|34|  

我需要一种算法,它可以通过鼠标单击获取网格的中心点并将其转换为与列表对应的数字。例如点 (50,50) 将返回 0,点 (150,150) 将返回 6,等等。

非常感谢您花时间帮助找出这个算法!

4

2 回答 2

5
In [1]: def f(x, y):
   ...:     return y // 100 * 5 + x // 100
   ...: 

In [2]: f(50, 50)
Out[2]: 0

In [3]: f(150, 150)
Out[3]: 6
于 2012-12-09T22:49:38.497 回答
1
def point_to_xy(x_mouse,y_mouse):
    x_pos = math.floor(x_mouse/100) #or x_mouse // 100
    y_pos = math.floor(y_mouse/100) #or y_mouse // 100
    return x_pos,y_pos

def xy_to_index(x_pos,y_pos):
    array_0_width = 5 #the width of the 2d array
    #position is y*width + x_offset
    return y_pos*array_0_width+x_pos

x,y = point_to_xy(mouse.x,mouse.y)
print xy_to_index(x,y)

我认为那会奏效

>>> x,y = point_to_xy(150,150) #x,y=1,1
>>> print xy_to_index(x,y)
6.0
>>> x,y = point_to_xy(50,50) # x,y=0,0
>>> print xy_to_index(x,y)
0.0
于 2012-12-09T22:47:23.877 回答