私は極小値に応じてx-y平面内のポイントのリストを、最小y値を持つリストから選択したポイントでソートしようとしています。ソートのキーとしてパラメータを変更する関数を使用する
私はその可能な場合、私は思っていた二つの点
def theta(pointA, pointB):
dx = pointB[0] - pointA[0]
dy = pointB[1] - pointA[1]
if abs(dx) < 1.e-6 and abs(dy) < 1.e-6:
t = 0
else:
t = dy/(abs(dx) + abs(dy))
if dx < 0:
t = 2 - t
elif dy < 0:
t = 4 + t
return t * 90
間の角度を見つけるために、機能シータを有するlistPts
における最小のy値を見つけるために
min(listPts, key=lambda t: (t[1], -t[0]))
を使用何らかの理由でこの点を.sort()メソッドのキーとして使用すると、チェックされる各点はthetaの点Bが異なります。
歓声
返事をありがとう、この質問は本当にひどく言われました。私は関数がドキュメントからキーとして渡すことができることを理解していますが、この場合、ソートされている各ポイント(pointB)に対して新しい第2パラメータを与える必要がありますか? – saleem
@saleem:これは 'cmp'関数です(Py2のみ)。しかし、ドキュメントを読めば(真剣に私はここのドキュメントをリンクしています)、古いスタイルの 'cmp'関数を' key'関数に変換するユーティリティに直接リンクします。それは簡単です。 – ShadowRanger
@saleem:あなたが使用している関数を読んでいると、それはコンパレータ関数ではありません(戻り値は負ではなく、相対的な順序を示す0または正ではありません)。それはちょうど2つのポイントがどれほど離れているか、角度にそって言うことです。しかし、離散点を相対角度でソートすることはできません。あなたはどのように異なる位置で2点の対を扱いますか?ポイントペアを相対位置で並べ替えるようにしたいので、実際には単一のポイントが結果に何度も現れるでしょうか? – ShadowRanger