2011-03-08 25 views
27

Digamos que tengo x1, y1 y también x2, y2.¿Cómo encuentro la distancia entre dos puntos?

¿Cómo puedo encontrar la distancia entre ellos? Es una función matemática simple, pero ¿hay un fragmento de esto en línea?

+42

Esto es ridículo. ¿Incluso * intentaste * buscar? –

+1

No funcionó. Así que pregunté aquí. Descubrí por qué. Es porque lo hice^en lugar de ** – TIMEX

+2

@Greg: su historial dice que no. @TIMEX: ¿La búsqueda no funcionó? En serio: http://www.google.com/search?q=python+distance+points –

Respuesta

49
dist = sqrt((x2 - x1)**2 + (y2 - y1)**2) 

Como otros han señalado, también puede utilizar el equivalente incorporada math.hypot():

dist = math.hypot(x2 - x1, y2 - y1) 
+0

Esto es, por cierto, la [fórmula de distancia] (http://en.wikipedia.org/wiki/Distance#Geometry) –

+2

¿te refieres a http://en.wikipedia.org/wiki/Euclidean_distance? –

+0

¿Esta no es la forma de hacer el "poder" en python? ¿No es así? – TIMEX

52

No olvidemos math.hypot:

dist = math.hypot(x2-x1, y2-y1) 

Aquí está hypot como parte de un fragmento para calcular la longitud de una trayectoria definida por una lista de x, tuplas y:

from math import hypot 

pts = [ 
    (10,10), 
    (10,11), 
    (20,11), 
    (20,10), 
    (10,10), 
    ] 

ptdiff = lambda (p1,p2): (p1[0]-p2[0], p1[1]-p2[1]) 
diffs = map(ptdiff, zip(pts,pts[1:])) 
path = sum(hypot(*d) for d in diffs) 
print path 
+0

Python3 ya no permite tuplas como parámetro lambda, por lo que la función se convierte en esto: ptdiff = lambda p: (p [0] [0] -p [1] [0], p [0] [1] -p [1] [1]) diffs = map (ptdiff, zip (pts [: - 1], pts [1:])) ruta = suma (math.hypot (d1, d2) para d1, d2 en diffs) –

Cuestiones relacionadas