Python 3.5.2: Distancia desde un punto a una línea

He creado una clase de “Punto” y quiero calcular la distancia más corta entre un punto dado y una línea (caracterizada por otros 2 puntos), todos los puntos son conocidos. Intenté usar esta fórmula: | Ax + By + C | / sqrt (A ^ 2 + B ^ 2), pero me equivoqué y me confundí más por minuto (principalmente debido a las fórmulas matemáticas :() …

Encontré algunos sitios donde la gente hacía esta pregunta también, pero o no era para Python o estaba en un sistema 3D no 2D …

Al air libre
Abajo esta mi clase:

class Point: def __init__(self,initx,inity): self.x = initx self.y = inity def getX(self): return self.x def getY(self): return self.y def __str__(self): return "x=" + str(self.x) + ", y=" + str(self.y) def distance_from_point(self,the_other_point): dx = the_other_point.getX() - self.x dy = the_other_point.getY() - self.y def slope(self,other_point): if self.x - other_point.getX() == 0 : return 0 else: panta = (self.y - other_point.getY())/ (self.x - other_point.getX()) return panta 

¿Puede alguien ayudarme a escribir una función separada o un método que haga lo que quiero? Lo intenté durante 2 horas y no puedo entenderlo …

Debería poder utilizar esta fórmula directamente desde los puntos. Entonces, tendrías algo como:

 import math class Point: def distance_to_line(self, p1, p2): x_diff = p2.x - p1.x y_diff = p2.y - p1.y num = abs(y_diff*self.x - x_diff*self.y + p2.x*p1.y - p2.y*p1.x) den = math.sqrt(y_diff**2 + x_diff**2) return num / den 

La fórmula de la distancia entre dos puntos es Distance =sqrt((x2−x1)^2+(y2−y1)^2) . Y la fórmula para calcular la pendiente es la slope = (y2 - y1) / (x2 - x1) .

Así que abajo está un método simple para calcular la distancia.

 def distance_from_other_point(self, other_point): return math.sqrt( ( other_point.getX() - self.getX() )**2 + ( other_point.getY() - self.getY() )**2 ) def slope(self, otehr_point): return ( other_point.getY() - self.getY() )*1.0 / ( other_point.getX() - self.getX() ) 

En el segundo método, pendiente, multiplicé por 1.0 para que el resultado esté en flotación. Nota: utilicé la syntax de python 2.7.6 aunque, con suerte, también funcionará en python 3.x.