如何计算Python中一个点和一个点列表之间的欧几里德距离?

Luc*_*sen 0 python list distance points

def findDistance((x1,y1),p) # finds Euclidean distance
Run Code Online (Sandbox Code Playgroud)

让我们说p是[(0, 0), (1, 0), (0, 1), (1, 1), (0, -1), (-1, 1)],

x1 = 0

y1 = 0
Run Code Online (Sandbox Code Playgroud)

可选,您可以定义半径.半径默认为1.结果应该只包括那些以谎言点radius(x1, y1):

findDistance((0, 0), punten)
Run Code Online (Sandbox Code Playgroud)

[(0,0),(1,0),(0,1),(0,-1)]

NPE*_*NPE 8

以下将找到以下(x1, y1)各点之间的(欧几里德)距离p:

In [6]: [math.sqrt((x1-x2)**2+(y1-y2)**2) for x2,y2 in p]
Out[6]: [0.0, 1.0, 1.0, 1.4142135623730951, 1.0, 1.4142135623730951]
Run Code Online (Sandbox Code Playgroud)

如果您只想要距离一定距离的点(x1, y1),您可以写:

In [8]: [(x2,y2) for x2,y2 in p if math.sqrt((x1-x2)**2+(y1-y2)**2) <= 1.0]
Out[8]: [(0, 0), (1, 0), (0, 1), (0, -1)]
Run Code Online (Sandbox Code Playgroud)

这里1.0是所需的半径.

把它们放在一起:

import math

def filter_points(points, origin, radius=1.0):
  x1, y1 = origin
  return [(x2,y2) for x2,y2 in points if math.sqrt((x1-x2)**2+(y1-y2)**2) <= radius]

p = [(0, 0), (1, 0), (0, 1), (1, 1), (0, -1), (-1, 1)]
print(filter_points(p, (0, 0), 1.0))
Run Code Online (Sandbox Code Playgroud)

NB值得考虑四舍五入的问题:非常接近边界的点可能最终被错误分类.是否重要,以及如何最好地处理这取决于您打算如何处理结果.