def findDistance((x1,y1),p) # finds Euclidean distance
假设p是[(0, 0), (1, 0), (0, 1), (1, 1), (0, -1), (-1, 1)]
,
x1 = 0
y1 = 0
可选,您可以定义半径。
半径默认为1。
结果应该只包括radius
(x1, y1)
的那些点:
findDistance((0, 0), punten)
[(0,0),(1,0),(0,1),(0,-1)]
答案 0 :(得分: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]
如果你只想要距(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)]
此处,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))
N.B。值得记住四舍五入的问题:非常接近边界的点可能最终被错误分类。它是否重要,以及如何最好地处理这取决于你打算如何处理结果。
答案 1 :(得分:1)
>>> p = [(0, 0), (1, 0), (0, 1), (1, 1), (0, -1), (-1, 1)]
>>> orig = (0, 0)
>>> map(lambda point: ((point[0]-orig[0])**2 + (point[1]-orig[1])**2)**(0.5), p)
[0.0, 1.0, 1.0, 1.4142135623730951, 1.0, 1.4142135623730951]