用向量投影求点到lin的距离

2024-09-19 23:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在计算点和线之间的垂直距离。我用向量投影来绘制向量拒绝。然而,当我绘制矢量拒绝时,它并不是与原始矢量成直角。谁能帮忙吗?在

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)

Tags: plot矢量np绘制pltam向量vector1
1条回答
网友
1楼 · 发布于 2024-09-19 23:34:03

它实际上是一个直角;你被你的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

相关问题 更多 >