我正在尝试设置一个路径查找器,在该路径中我通过一个迷宫(1/0的阵列,其中1个是障碍物),起点/终点,并使其返回最佳路径。
我将以下代码作为基础,并修改了“ main”函数,如下所示。 https://medium.com/@nicholas.w.swift/easy-a-star-pathfinding-7e6689c7f7b2
def main():
maze = [[0,1,0,0,...],[0,0,0,0...],[...]...,[...]] #Example 2D List
start = (4, 33)
end = (200, 200)
path = astar(maze, start, end)
print(path)
#Create blank image for openCV
img = np.zeros((221,221,3), np.uint8)
x, y = 0, 0
red = [0, 0, 255]
#Draw obstacles
for row in maze:
y+=1
x=0
for value in row:
x+=1
if value == 1: img[y, x]=red
#Draw path
for x, y in path:
img[y, x] = (255, 0, 0)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
用来制作地图的迷宫在这里:https://pastebin.com/wT6dGQnj 这是一个较大项目的简化案例,因此列表在此处已“硬编码”。
下面是输出,由于路径越过多个障碍,这似乎是不正确的: Results
答案 0 :(得分:0)
我认为问题在于您如何绘制墙壁,而不是路径。您从y=1
开始,似乎也在那里切换了x和y。我在原始代码中使用了10x10迷宫,一旦按如下所示更改了墙绘部分,一切看起来就正确了:
n = 10
img = np.zeros((n,n,3), np.uint8)
x, y = 0, 0
red = [0, 0, 255]
# Draw the walls in red. This is the part I changed.
for i in range(n):
for j in range(n):
if maze[i][j] == 1:
img[i,j] = red
# Draw the path in blue
for x, y in path:
img[x, y] = (255, 0, 0)
尽管您可以像我在这里那样进行两个嵌套的maze
循环,但是可以将img
映射到for
,这可能是一种更有效的方法。