use*_*675 14 python numpy point vector scipy
我正在使用Python + Numpy(也可以使用Scipy)并且有三个2D点
(P1, P2, P3);
Run Code Online (Sandbox Code Playgroud)
我试图让P3的距离垂直于P1和P2之间绘制的直线.让P1=(x1,y1),P2=(x2,y2)和P3=(x3,y3)
在矢量符号中,这将非常简单,但我对python/numpy相当新,并且无法获得任何有效(甚至关闭)的东西.
任何提示赞赏,谢谢!
Dot*_*tPi 25
尝试使用norm函数numpy.linalg
d = norm(np.cross(p2-p1, p1-p3))/norm(p2-p1)
Run Code Online (Sandbox Code Playgroud)
np.cross仅针对2D向量返回叉积的z坐标。因此,norm不需要接受答案中的第一个,并且如果p3是向量数组而不是单个向量,则实际上很危险。最好只是使用
d=np.cross(p2-p1,p3-p1)/norm(p2-p1)
Run Code Online (Sandbox Code Playgroud)
对于点数组,这p3将为您提供与直线的距离数组。
小智 5
为了使上述答案有效,这些点必须是numpy数组,这是一个工作示例:
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)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果有斜率和截距,要查找从点到线的距离,可以使用 wiki https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line Python 中的公式:
def distance(point,coef):
return abs((coef[0]*point[0])-point[1]+coef[1])/math.sqrt((coef[0]*coef[0])+1)
Run Code Online (Sandbox Code Playgroud)
coef 是一个具有斜率和截距的元组
用下面的直线方程进行测试 -
\n\n\n\n\n求从点 (5, 6) 到直线 \xe2\x88\x922x + 3y + 4 = 0 的垂直距离
\n
import numpy as np\nnorm = np.linalg.norm\n\np1 = np.array([0,-4/3])\np2 = np.array([2, 0])\n\np3 = np.array([5, 6])\nd = np.abs(norm(np.cross(p2-p1, p1-p3)))/norm(p2-p1)\n# output d = 3.328201177351375\n\nRun Code Online (Sandbox Code Playgroud)\n