2016-10-03 75 views
4

我使用Python + numpy的(也許可以也使用SciPy的),並有三個2D點點和線(從2個點)

(P1, P2, P3); 

我想從P3垂直距離之間的距離到在P1和P2之間畫出的線。讓P1=(x1,y1)P2=(x2,y2)P3=(x3,y3)

以矢量標記,這將是很容易的,但我相當新的Python/numpy的,並不能得到anythng的作品(或者甚至關閉)。

任何提示讚賞,謝謝!

回答

10

嘗試使用規範函數從numpy.linalg

d = norm(np.cross(p2-p1, p1-p3))/norm(p2-p1) 
0

np.cross返回叉積的僅用於二維矢量的z座標。因此,接受的答案中的第一個norm是不需要的,而且如果p3是一個向量數組而不是單個向量,那麼它實際上是危險的。最好只使用

d=np.cross(p2-p1,p3-p1)/norm(p2-p1) 

這對於一個點的數組p3會給你從線距離的陣列。

+0

你能解釋一下,如果'p3'是一個數組,那麼分子中的'norm'如何是危險的? – dinosaur

+0

@dinosaur,因爲'norm'將把'np.cross'返回的一維數組作爲一個大的向量並返回它的「大小」。 –