資源簡介
尋路.py
代碼片段和文件信息
#?一個小地圖的信息
class?Point:
????“““表示一個點“““
????def?__init__(self?x?y):
????????self.x?=?x
????????self.y?=?y
????def?__eq__(self?other):
????????if?self.x?==?other.x?and?self.y?==?other.y:
????????????return?True
????def?__str__(self):
????????return?“x:“?+?str(self.x)?+?“,y:“?+?str(self.y)
#?自動尋路
class?AStar:
????“““A*算法python“““
????class?Node:??#?描述AStar算法中的節點數據
????????def?__init__(self?point?endpoint?G=0):
????????????self.point?=?point??#?自己的位置(array)
????????????self.father?=?None??#?父節點
????????????self.G?=?G??#?g值,g值用到會重新計算
????????????self.H?=?(abs(endpoint.x?-?point.x)?+?abs(endpoint.y?-?point.y))?*?10
????def?__init__(self?map2d?startpoint?endpoint?passtag=96):
????????“““
????????構造A*算法的啟動條件
????????:param?map2d:?Array2D類型的尋路數組
????????:param?startPoint:?Point或二元組類型的尋路起點
????????:param?endPoint:?Point或二元組類型的尋路終點
????????:param?passTag:?int類型的可行走標記(若地圖數據!=passTag即為障礙)
????????“““
????????#?開啟表
????????self.openlist?=?[]
????????#?關閉表
????????self.closelist?=?[]
????????#?尋路的地圖
????????self.map2d?=?map2d
????????self.width?self.height?=?map2d.shape[:2]
????????#?起點終點
????????if?isinstance(startpoint?Point)?and?isinstance(endpoint?Point):
????????????self.startpoint?=?startpoint
????????????self.endpoint?=?endpoint
????????else:
????????????self.startpoint?=?Point(*startpoint)
????????????self.endpoint?=?Point(*endpoint)
????????#?不可行走標記
????????self.passtag?=?passtag
????def?getMinNode(self):
????????“““獲得poenlist中F值最小的節點“““
????????cur_node?=?self.openlist[0]
????????for?node?in?self.openlist:
????????????if?node.G?+?node.H?????????????????cur_node?=?node
????????return?cur_node
????#?判斷自己坐標在不在關閉表
????def?pointCloseList(self?point):
????????for?node?in?self.closelist:
????????????if?node.point?==?point:
????????????????return?True
????????return?False
????#?查找開啟表中有沒有自己的坐標
????def?pointOpenList(self?point):
????????for?node?in?self.openlist:
????????????if?node.point?==?point:
????????????????return?node
????????return?None
????#?判斷是否是終點
????def?endPointCloseList(self):
????????for?node?in?self.openlist:
????????????if?node.point?==?self.endpoint:
????????????????return?node
????????return?None
????def?searchNode(self?minF?offset_x?offset_y):
????????“““
????????搜索節點周圍的點
????????:param?minF:F值最小的節點
????????:param?offset_x:坐標偏移量
????????:param?offset_y:
????????:return:
????????“““
????????#?越界檢測
????????if?minF.point.x?+?offset_x?0?\
????????????????or?minF.point.x?+?offset_x?>?self.width?-?1?\
????????????????or?minF.point.y?+?offset_y?0?\
????????????????or?minF.point.y?+?offset_y?>?self.height?-
- 上一篇:pb模型文件進行前向預測親測可用
- 下一篇:Python文字識別
評論
共有 條評論