Im Finden der Entfernung zwischen zwei Punkten, gegeben departure = [x,y]
und destination = [x,y]
. Mit x oder y ist einer immer ein float und der andere ein int, also immer auf einer Linie. Sie müssen auf den Gitternetzlinien bleiben, um zum Zielpunkt zu gelangen, und es gibt keine Satzinkrementierung. Ich habe keine anderen Beiträge über das Finden von Entfernungen auf einem Gitter gesehen, die sich mit dem Mix aus Ints und Floats befassen, also bin ich hier.Finden Sie die Entfernung zwischen 2 Punkten auf Raster
Dies ist mein Code:
def perfectCity(departure, destination):
return abs(destination[0]-departure[0]) + abs(destination[1]-departure[1])
Ein Beispiel departure = [0.4, 1]
und destination = [0.9, 3]
wäre, sollte es 2,7 gleich, aber ich bekomme 2,5
Beispiel: Sie gehen [0.4, 1]
-[1, 1]
zu [1, 3]
-[0.9, 3]
für eine Gesamtdifferenz von 2,7. Es ist, als würde man die Manhattan-Distanz berechnen, aber anstatt an Gitterpunkten zu beginnen und zu enden, könnte man einen halben Block entlang beginnen und/oder enden.
haben Floats fast immer ein bisschen Rundungsfehler. Finite Dezimal-Erweiterungen in der Basis 10 sind nicht immer endliche Dezimal-Erweiterungen in der Basis 2 –
Mögliches Duplikat von [Ist Fließkomma-Mathematik gebrochen?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –
Ich glaube nicht, dass es ein Duplikat ist, weil Sie wissen müssten, dass es sich um einen Gleitkommafehler handelt, im anderen Thread ist es explizit. – JonnyDoeInWisco