La Distance entre un point et une ligne (de deux points)
Je suis à l'aide de Python+Numpy (peut peut-être également utiliser Scipy) et ont trois points 2D
(P1, P2, P3);
J'essaie d'obtenir la distance de P3 perpendiculaire à une ligne tracée entre P1 et P2. Laissez P1=(x1,y1)
, P2=(x2,y2)
et P3=(x3,y3)
Dans vecteur de notation, ce serait assez facile, mais je suis assez nouveau à l'python/numpy et ne peut pas obtenir anythng qui fonctionne (ou à proximité).
Des conseils apprécié, merci!
OriginalL'auteur user1185675 | 2016-10-03
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser le norme fonction de
numpy.linalg
np.abs(np.cross(p2-p1, p1-p3)) / norm(p2-p1))
?unsupported operand type(s) -: 'tuple' et 'tuple'? Qu'est-ce?
vous avez besoin de convertir les points de tableaux numpy. Cela peut être fait comme suit:
p1 = np.asarray(p1)
abs((x2-x1)*(y1-y0) - (x1-x0)*(y2-y1)) / np.sqrt(np.square(x2-x1) + np.square(y2-y1))
J'ai utilisé de cette façon, et il m'a donné la même réponse en pythonEst-ce à assumer la ligne s'étend à l'infini, ou la distance qu'il génère deviennent plus grands que les points
P3
pousser plus loin de l'extrémité de la ligne de segment généré parP1,P2
?OriginalL'auteur DotPi
np.cross
retourne la coordonnée z de la croix produit que pour la 2D vecteurs. Donc, la premièrenorm
dans l'acceptation réponse n'est pas nécessaire, et elle est réellement dangereux sip3
est un tableau de vecteurs plutôt que d'un seul vecteur. Mieux utiliserqui, pour un tableau de points
p3
vous donnera un tableau de distances de la ligne.norm
dans le numérateur est dangereux sip3
est un tableau?parce que
norm
permettra de traiter les 1D tableau retourné parnp.cross
comme un gros vecteur et renvoie sa "taille".J'ai seulement eu un connecté télé après la suppression de la première norme, c'est une distance qui me dit que si le point est à droite ou à gauche de la ligne, selon certains, de la convention.
OriginalL'auteur Martin Hardcastle
Ci-réponses de travail, les points doivent être des tableaux numpy, voici un exemple de travail:
OriginalL'auteur Szymon Szott
Peut être utilisé directement par le biais de la formule, suffit de le brancher dans les valeurs de la flèche et il va fonctionner.
OriginalL'auteur id101112
Pour trouver la distance à la ligne à partir de là, si vous avez de la pente et ordonnée à l'origine, vous pouvez utiliser la formule de wiki
https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line
Python:
coef est un tuple avec la pente et ordonnée à l'origine
OriginalL'auteur Aydar Akhmetzyanov