Distancia entre un punto y una línea (a partir de dos puntos)

Estoy usando Python + Numpy (puede que también pueda usar Scipy) y tengo tres puntos 2D

(P1, P2, P3); 

Estoy tratando de obtener la distancia desde P3 perpendicular a una línea dibujada entre P1 y P2. Sea P1=(x1,y1) , P2=(x2,y2) y P3=(x3,y3)

En notación vectorial, esto sería bastante fácil, pero soy bastante nuevo en python / numpy y no puedo obtener nada que funcione (o incluso que cierre).

Cualquier consejo apreciado, gracias!

Intente usar la función normal de numpy.linalg

 d = norm(np.cross(p2-p1, p1-p3))/norm(p2-p1) 

np.cross devuelve la coordenada z del producto cruzado solo para vectores 2D. Por lo tanto, la primera norm en la respuesta aceptada no es necesaria, y en realidad es peligrosa si p3 es un conjunto de vectores en lugar de un solo vector. Mejor solo para usar

 d=np.cross(p2-p1,p3-p1)/norm(p2-p1) 

que para una matriz de puntos p3 le dará una matriz de distancias desde la línea.

Para que funcionen las respuestas mencionadas anteriormente, los puntos deben ser numerosos arreglos, aquí hay un ejemplo práctico:

 import numpy as np p1=np.array([0,0]) p2=np.array([10,10]) p3=np.array([5,7]) d=np.cross(p2-p1,p3-p1)/np.linalg.norm(p2-p1) 
 abs((x2-x1)*(y1-y0) - (x1-x0)*(y2-y1)) / np.sqrt(np.square(x2-x1) + np.square(y2-y1)) 

Se puede usar directamente a través de la fórmula, solo tiene que conectar los valores y el auge funcionará.

Para encontrar la distancia a la línea desde el punto, si tiene pendiente e intersección, puede usar la fórmula de la wiki https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line Python:

 def distance(point,coef): return abs((coef[0]*point[0])-point[1]+coef[1])/math.sqrt((coef[0]*coef[0])+1) 

Coef es una tupla con pendiente e intersección.