Abstand zwischen Punkt und eine Linie (an zwei Punkten)
Ich bin mit Python+Numpy (kann vielleicht auch verwenden, Scipy) und haben drei 2D Punkte
(P1, P2, P3);
Ich versuche den Abstand von P3 senkrecht zu einer Linie zwischen P1 und P2. Lassen Sie P1=(x1,y1)
, P2=(x2,y2)
und P3=(x3,y3)
In der Vektor-notation wäre dies ziemlich einfach, aber ich bin ziemlich neu in python/numpy und kann nicht anythng, die funktioniert (oder sogar schließen).
Irgendwelche Tipps geschätzt, danke!
InformationsquelleAutor user1185675 | 2016-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, mit den norm Funktion von
numpy.linalg
np.abs(np.cross(p2-p1, p1-p3)) / norm(p2-p1))
?unsupported operand type(s) for -: 'Tupel' und 'Tupel'? Was ist das?
müssen Sie konvertieren Sie die Punkte in numpy-arrays. Diese kann getan werden, etwa so:
p1 = np.asarray(p1)
abs((x2-x1)*(y1-y0) - (x1-x0)*(y2-y1)) / np.sqrt(np.square(x2-x1) + np.square(y2-y1))
Habe ich es auf diese Weise, und es gab mir die gleiche Antwort in pythonTut dies übernehmen die Linie geht ins unendliche, oder die Distanz, die erzeugt werden, die größer als Punkte
P3
wachsen weiter entfernt von den Endpunkten der Liniensegmente erzeugt, indemP1,P2
?InformationsquelleAutor DotPi
np.cross
gibt die z-Koordinate des Kreuzes Produkt nur für 2D-Vektoren. So die erstennorm
in der akzeptierten Antwort ist nicht nötig, und das ist eigentlich gefährlich, wennp3
ist ein array von Vektoren eher als ein einzelner Vektor. Am besten verwenden Siewas für ein array von Punkten
p3
geben Sie ein array von Entfernungen von der Linie.norm
im Zähler ist gefährlich, wennp3
ist ein array?da
norm
zu behandeln, wird das 1D-array zurückgegebennp.cross
als eine große Vektor-und wieder in seine "Größe".Ich habe Sie nur unterzeichnet Abstand nach entfernen der ersten norm, das heißt, eine Entfernung, die mir sagt, wenn der Punkt auf der rechten oder linken Seite der Linie, nach einigen Konvention.
InformationsquelleAutor Martin Hardcastle
Für die oben genannten Antworten zu arbeiten, die Punkte müssen in numpy-arrays, hier ist ein funktionierendes Beispiel:
InformationsquelleAutor Szymon Szott
Direkt verwendet werden können durch die Formel, nur noch Stecker in die Werte und boom, es wird funktionieren.
InformationsquelleAutor id101112
Zu finden, Abstand zu der Linie aus Punkt, wenn Sie haben Steigung und Achsenabschnitt können Sie mithilfe der Formel aus wiki
https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line
Python:
coef ist ein Tupel mit Steigung und Achsenabschnitt
InformationsquelleAutor Aydar Akhmetzyanov