2016-10-03 69 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'返回的一维数组作为一个大的向量并返回它的“大小”。 –