(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))
注意:丸めの問題を念頭に置く価値があります。境界に非常に近いポイントは、誤って分類される可能性があります。それが重要であるかどうか、そしてこれにどのように対処するのが最善かは、結果をどうするかによって異なります。