[英]How to check if a point lies on the (minimum) manhattan distance line?
我有一個8x10矩陣,其中某些方塊被遮擋了:
no = [(2,4),(3,4),(6,4),(7,4),(2,5),(3,5),(6,5),(7,5)]
而且我需要找出兩點之間的最短(曼哈頓)路徑(作為嵌套元組(((0,5),(6,2))給予此功能)是否包含任何塊,然后圍繞它進行重新布線。
現在要執行此操作,我試圖通過將從A到C的距離加到從C到B的距離上並看是否等於C來求出歐幾里德距離的邏輯,以查看C是否在A和B之間的線上。 A到B ,但我不相信數學……
def manhattan_dist(move): #order doesn't matter
a = move[0][0]
b = move[0][1]
c = move[1][0]
d = move[1][1]
mandist = abs(a-c)+abs(b-d)
if (any (abs(a-box[0])+abs(b-box[1])) == (mandist-(abs(c-box[0])+abs(d-box[1]))) for box in no):
print("blocked")
#calculate go-around logic
return mandist
它為manhattan_dist(((0,1),(0,7)))
打印“ blocked”,所以我知道我在python中也做錯了。
由於缺少代表,回答而不是發表評論(...我是新來的)。
在我看來有點不明確。 曼哈頓距離沒有一條最短的路線...實際上,按照定義,它有許多最短的路線。
所以也許嘗試弄清楚你的意思?
順便說一句,如果您想知道是否有任何曼哈頓路徑被阻止,那么這意味着您有一個帶有
min([a, c]) < box[0] < max([a, c]) and min([b, d]) < box[1] < max([b, d])
根據評論中的討論進行編輯:
首先,總是有精確的abs(ac) + abs(bd)
選擇具有最小曼哈頓距離的abs(ac)
路徑。 (對不正確的表示法表示抱歉;僅在出現參數params的情況下,不幸的是缺少乳膠支持)。
如果您正確地處理了幾何圖形,那么所有被阻塞的最小路徑都是非常棘手的,而且不會很快。 我不會立即看到一種避免循環遍歷所有路徑的方法,通過將路徑分類為分層樹並在正方形被阻塞時刪除完整分支而獲得了一些優化……
現在要執行此操作,我試圖通過將從A到C的距離加到從C到B的距離上並看是否等於C來求出歐幾里德距離的邏輯,以查看C是否在A和B之間的線上。 A到B
您在此處使用的數學概念稱為“度量”。 這只是您已經熟悉的歐幾里得距離的概括。 有關詳細信息,請參見Wikipedia文章 。 曼哈頓距離滿足度量標准的所有要求。 這意味着可以確信,如果d(A, B) + d(B, C) = d(A, C)
則B
位於A
和C
之間A
最短路徑上。 與歐幾里得距離不同,從A
到C
的距離可能很多,並且其中許多路徑可能會經過B
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.