使用矢量投影查找点到线的距离

时间:2018-06-19 21:55:52

标签: python matplotlib vector geometry

我正在尝试计算点与线之间的垂直距离。我正在使用矢量投影来绘制矢量拒绝。但是,当我绘制矢量抑制图时,它与原始矢量的角度不正确。有人可以帮忙吗?

The graph I'm speaking of is here

绿线和橙线应垂直,但不垂直。

x=np.linspace(1,40,10000)
y=3+.5*x
xini, yini=1,3.5
plt.plot(x,y,label='vector1')
am=np.stack((x,y))
am[:,0]
xy,length=am.shape
xatom,yatom=2,3

xm=am[0,-1]
ym=am[1,-1]
Vector1=[xatom-xini,yatom-yini,0]
Vector2=[xm-xini,ym-yini,0]
unitb=Vector2/np.linalg.norm(Vector2)
impactvector=Vector1-unitb*np.dot(Vector1, unitb)

plt.plot(x,y)
plt.scatter(xatom,yatom)
b=np.linalg.norm(impactvector)
plt.plot(x,yatom+(impactvector[1]/impactvector[0])*(x-xatom))
plt.xlim(0,4)
plt.ylim(2,4)

1 个答案:

答案 0 :(得分:2)

它实际上成直角;您会被XY轴所使用的不同比例所迷惑。

如果将比例尺调整为相等,则图形将显示垂直度。

import numpy as np
import matplotlib.pyplot as plt


if __name__ == '__main__':

    x = np.linspace(1, 40, 10000)
    y = 3 + 0.5 * x
    xini, yini = 1, 3.5
    plt.plot(x, y, label='vector1')
    am = np.stack((x, y))
    xy, length = am.shape
    xatom, yatom = 2, 3

    xm = am[0, -1]
    ym = am[1, -1]
    Vector1 = [xatom - xini, yatom - yini, 0]
    Vector2 = [xm - xini, ym - yini, 0]
    unitb = Vector2 / np.linalg.norm(Vector2)
    impactvector = Vector1 - unitb * np.dot(Vector1, unitb)

    plt.plot(x, y)
    plt.scatter(xatom, yatom)
    b = np.linalg.norm(impactvector)
    plt.plot(x, yatom + (impactvector[1] / impactvector[0]) * (x - xatom))
    plt.xlim(0, 4)
    plt.ylim(2, 4)

    plt.axis('equal')

    plt.show()

enter image description here