J'utilise Python + Numpy (peut-être aussi utiliser Scipy) et j'ai trois points 2D
(P1, P2, P3);
J'essaie d'obtenir la distance de P3 perpendiculairement à une ligne tracée entre P1 et P2. Soit P1=(x1,y1)
, P2=(x2,y2)
et P3=(x3,y3)
En notation vectorielle, cela serait assez facile, mais je suis assez novice en python/numpy et je ne peux obtenir aucun résultat qui fonctionne (ou même proche).
Tous les conseils appréciés, merci!
Essayez d’utiliser la fonction norm de numpy.linalg
d = norm(np.cross(p2-p1, p1-p3))/norm(p2-p1)
np.cross
renvoie la coordonnée z du produit croisé uniquement pour les vecteurs 2D. Ainsi, la première norm
dans la réponse acceptée n'est pas nécessaire et est en fait dangereuse si p3
est un tableau de vecteurs plutôt qu'un seul vecteur. Mieux juste pour utiliser
d=np.cross(p2-p1,p3-p1)/norm(p2-p1)
qui pour un tableau de points p3
vous donnera un tableau de distances de la ligne.
Pour que les réponses mentionnées ci-dessus fonctionnent, les points doivent être des tableaux numpy, voici un exemple concret:
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))
Peut être utilisé directement dans la formule, il suffit de brancher les valeurs et de faire bouger les choses.