如何在Python中计算直线上两点之间的距离

6

我有两条线段,分别是 (x1,y1)(x2,y2)。我需要计算这两点之间的距离。请看下面我的代码片段:

import numpy as np
import plotly.express as px
import plotly.graph_objects as go

x1= np.array([525468.80914272, 525468.70536016])
y1= np.array([175517.80433391, 175517.75493122])

x2= np.array([525468.81174, 525468.71252])
y2= np.array([175517.796305, 175517.74884 ])

这是绘图的代码:

fig= go.Figure()

fig.add_trace(go.Scatter(x=x1, y=y1, name="point1"))
fig.add_trace(go.Scatter(x=x2, y=y2, name="point2"))

请查看下图

1

黑线是我想要计算的距离

我的期望结果是:(0.008438554274975979, 0.0085878435595034274819)


1
你没有任何正确的答案吗?这样我们才能检查所提供的解决方案是否正确。 - Mahrad Hanaforoosh
我认为你的线段是从(x1 [0],y1 [0])到(x1 [1],y1 [1]),以及从(x2 [0],y2 [0])到(x2 [1],y2 [1])对吗? - joostblack
是的,感觉正确 - I-love-python
这个回答解决了你的问题吗?[如何在numpy数组上进行n-D距离和最近邻计算] (https://dev59.com/JFQK5IYBdhLWcg3wJMu0) - Daniel F
4个回答

3
你可以使用math库解决这个问题。
import math

distancePointA  = math.sqrt(((x1[0] - x2[0]) ** 2) + ((y1[0] - y2[0]) ** 2))
distancePointB  = math.sqrt(((x1[1] - x2[1]) ** 2) + ((y1[1] - y2[1]) ** 2))

2
今日免费次数已满, 请开通会员/明日再来
import numpy as np
distance_1 = np.linalg.norm(np.array([x1[0]-x2[0],y1[0]-y2[0]]))
distance_2 = np.linalg.norm(np.array([x1[1]-x2[1],y1[1]-y2[1]]))

print(distance_1,distance_2)

输出:

0.008438557910490769 0.009400333483144686

np.linalg.norm使用的默认范数是欧几里德范数(黑线所表示的距离)。

糟糕,我的错。我忘记了括号。现在应该已经修好了。 - joostblack

1

在这里,您可以使用勾股定理计算距离,我定义了两种方式

enter image description here

  • 通过使用公式 c=√(a²+b²),其中a=x1-x2b=y1-y2,可以得到距离为c=?
 import math
 a=x1-x2
 b=y1-y2

 c=abs(math.sqrt((a** 2) + (b ** 2)))

在你的情况下
import math
a1 = x1[0] - x2[0]
a2 = x1[1] - x2[1]
b1 = y1[0] - y2[0]
b2 = y1[1] - y2[1]

distance_a  = abs(math.sqrt((a1** 2) + (b1** 2)))
distance_b  = abs(math.sqrt((a2** 2) + (b2 ** 2)))
  • 您可以使用直接的hypot方法,它给出与查看hypot方法方程式hypot相同的答案。
import math
a1 = x1[0] - x2[0]
a2 = x1[1] - x2[1]
b1 = y1[0] - y2[0]
b2 = y1[1] - y2[1]

distance_a  = math.hypot(a1,b1)
distance_b  = math.hypot(a2,b2)


这些都是你可以使用的方法,但最终你会得到距离。

我收到了错误 - TypeError:仅大小为1的数组可以转换为Python标量 - I-love-python
@pandas-py我已经更改,请检查并告诉我在哪种情况下出现了此错误。 - l.b.vasoya
好的,这是因为数学不能处理向量,所以我使用了numpy。看起来不错,但我没有得到期望值,即0.008438557910490769,用于distance_a。 - I-love-python

0
你可以使用基于勾股定理的距离公式AB=√((xA-xB)²+(yA-yB)²),其中(xA, yA)(xB, yB)是点A,B的坐标。
应用到你的问题中:
import math

distance_1  = math.sqrt(((x1[0] - x2[0]) ** 2) + ((y1[0] - y2[0]) ** 2))
distance_2  = math.sqrt(((x1[1] - x2[1]) ** 2) + ((y1[1] - y2[1]) ** 2))

print(distance_1, distance_2)

输出:

0.008438557910490769 0.009400333483144686

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接