[英]Incorrect results from A*/Path-finding algorithm
我正在嘗試設置一個路徑查找器,在其中我通過一個迷宮(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這是一個更大項目的簡化案例,因此列表在這里已被“硬編碼”。
下面是輸出,當路徑跨越多個障礙時,它似乎是不正確的:結果
我認為問題在於你如何繪制牆壁,而不是路徑。 您從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
循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.