2016-12-05 5 views
0

Ich habe eine Klasse "Point" erstellt und ich möchte die kürzeste Entfernung zwischen einem bestimmten Punkt und einer Linie (gekennzeichnet durch 2 andere Punkte) berechnen, alle Punkte sind bekannt . Ich habe versucht, diese Formel zu verwenden: | Ax + By + C |/sqrt (A^2 + B^2), aber ich vermasselte und wurde mehr durch die Minute verwirrt (meistens wegen der Matheformeln :() ...Python 3.5.2: Entfernung von einem Punkt zu einer Linie

Ich fand einige Aufstellungsorte, in denen Leute diese Frage auch stellten , aber es war auch nicht für Python oder es war in einem 3D-System nicht 2D ...


Unter meiner Klasse ist:

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 

Kann mir jemand helfen, eine eigene Funktion oder ein Schreib Methode, die das tut, was ich will? Ich habe für 2 Stunden versucht und ich kann es nicht herausfinden ...

+0

Meinst du eine unendliche Linie, die diese zwei Punkte schneidet, oder eine Linie, die sich zwischen ihnen erstreckt, aber nicht weiter reicht? – Basic

+0

Ich stimme für das Schließen dieser Frage als Off-Topic, da es sich nicht um eine Programmierfrage handelt. Versuchen Sie http://math.stackexchange.com –

+0

@EliKorvigo: Yo, fand ich die mathematischen Formeln auch, aber das Problem war, es in Python zu übersetzen. Auch wer die Fläche eines Dreiecks und die Fläche eines Vierecks berechnen möchte (indem man es in zwei Dreiecke aufteilt) - was ich als nächstes mache - braucht das. – ROBlackSnail

Antwort

3

Sie sollten this Formel von den Punkten direkt verwenden können. Also, würden Sie so etwas wie haben:

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 
+0

Wenn dies eine Methode ist, sollte nicht ein Selbst in den Parametern sein? – ROBlackSnail

+0

Ja, du hast Recht, zu viel Java in diesen Tagen: P – Iluvatar

+0

Wie auch immer, nachdem ich das dort hinein getan habe, funktioniert es gut. Vielen Dank ! – ROBlackSnail

0

Die Abstandsformel zwischen zwei Punkten ist Distance =sqrt((x2−x1)^2+(y2−y1)^2). Und die Formel zur Berechnung der Steigung ist slope = (y2 - y1)/(x2 - x1).

so ist eine einfache Methode, um die Entfernung

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()) 

In dem zweiten Verfahren Steigung zu berechnen, I, multipliziert mit 1,0, so dass in Folge Schwimmers sein wird. Hinweis - Ich habe die Syntax von Python 2.7.6 verwendet, hoffentlich wird es auch in Python 3.x funktionieren.

+0

Ich glaube, ich habe die distance_from_other_point Methode falsch kopiert XD Es war: 'def distance_from_point (self, der_andere_Punkt): dx = the_other_point.getX() - self.x dy = the_other_point.getY() - self.y Rückkehr sqrt (dx ** 2 + dy ** 2) ' – ROBlackSnail

Verwandte Themen