我正在尝试计算点与线之间的垂直距离。我正在使用矢量投影来绘制矢量拒绝。但是,当我绘制矢量抑制图时,它与原始矢量的角度不正确。有人可以帮忙吗?
绿线和橙线应垂直,但不垂直。
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)
答案 0 :(得分:2)
它实际上成直角;您会被X
和Y
轴所使用的不同比例所迷惑。
如果将比例尺调整为相等,则图形将显示垂直度。
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()