0
def findDistance((x1,y1),p) # finds Euclidean distance

[(0, 0), (1, 0), (0, 1), (1, 1), (0, -1), (-1, 1)]pが、としましょう

x1 = 0

y1 = 0

オプションで、半径を定義できます。デフォルトでは、半径は1です。結果には、次のポイントのみが含まれる必要がradiusあり(x1, y1)ます。

findDistance((0, 0), punten)

[(0、0)、(1、0)、(0、1)、(0、-1)]

4

2 に答える 2

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))

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

于 2012-05-12T10:48:33.160 に答える
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]
于 2012-05-12T10:50:00.997 に答える