如何找到二维数组中两个元素之间的距离
How to find the distance between two elements in a 2D array
假设您有网格:
list = [[-,O,-,-,O,-,],
[O,-,-,-,-,O],
[O,O,-,-,X,-],
[-,-,O,-,-,-]]
你如何获得距离 X 3 以内的所有 O 的坐标?
从我在其他答案中看到的情况来看,使用 scipy.spatial.KDTree.query_ball_point 似乎是一种常见的方法,但我无法弄清楚如何使其适应我的用例。我有一个可能的想法是存储列表的每个坐标,例如
coords=[[0,0],[0,1]...]
然后使用scipy方法,传入X坐标和搜索距离。然后,一旦我收到可能的坐标列表,我就会遍历列表并检查哪些坐标等于 O。但是,我想知道是否可以使用更有效或更优化的解决方案。任何帮助将不胜感激。
您不需要使用 Scipy 让它变得太复杂。这道题只要借助数学就可以轻松解决。
圆内坐标方程为x^2 + y^2 <= Radius^2
,所以只需要检查圆内坐标即可
list = [[-,O,-,-,O,-,],
[O,-,-,-,-,O],
[O,O,-,-,X,-],
[-,-,O,-,-,-]]
X_coor = #Coordinate of X, in this case y = 2, x = 4
d = #Maximum distance from X in this case d = 3
total = 0
O_coor = [] #Store coordinate of all O near X
for y in range(max(0, X_coor.y - d), min(list.length - 1, X_coor.y + d)):
for x in range(max(0, X_coor.x - sqrt(d**2 - (y - X_coor.y)**2)), min(list.length - 1, X_coor.x + sqrt(d**2 - (y - X_coor.y)**2))):
if list[y][x] == "O":
total++
O_coor.append([x, y])
print(total)
print(O_coor)
代码很长,有不懂的地方可以问我
注意:这个解决方案只检查圆圈区域的坐标而不是整个列表,所以即使你有大列表这仍然非常快。
假设您有网格:
list = [[-,O,-,-,O,-,],
[O,-,-,-,-,O],
[O,O,-,-,X,-],
[-,-,O,-,-,-]]
你如何获得距离 X 3 以内的所有 O 的坐标?
从我在其他答案中看到的情况来看,使用 scipy.spatial.KDTree.query_ball_point 似乎是一种常见的方法,但我无法弄清楚如何使其适应我的用例。我有一个可能的想法是存储列表的每个坐标,例如
coords=[[0,0],[0,1]...]
然后使用scipy方法,传入X坐标和搜索距离。然后,一旦我收到可能的坐标列表,我就会遍历列表并检查哪些坐标等于 O。但是,我想知道是否可以使用更有效或更优化的解决方案。任何帮助将不胜感激。
您不需要使用 Scipy 让它变得太复杂。这道题只要借助数学就可以轻松解决。
圆内坐标方程为x^2 + y^2 <= Radius^2
,所以只需要检查圆内坐标即可
list = [[-,O,-,-,O,-,],
[O,-,-,-,-,O],
[O,O,-,-,X,-],
[-,-,O,-,-,-]]
X_coor = #Coordinate of X, in this case y = 2, x = 4
d = #Maximum distance from X in this case d = 3
total = 0
O_coor = [] #Store coordinate of all O near X
for y in range(max(0, X_coor.y - d), min(list.length - 1, X_coor.y + d)):
for x in range(max(0, X_coor.x - sqrt(d**2 - (y - X_coor.y)**2)), min(list.length - 1, X_coor.x + sqrt(d**2 - (y - X_coor.y)**2))):
if list[y][x] == "O":
total++
O_coor.append([x, y])
print(total)
print(O_coor)
代码很长,有不懂的地方可以问我
注意:这个解决方案只检查圆圈区域的坐标而不是整个列表,所以即使你有大列表这仍然非常快。