我正在尝试根据它们的极角对x-y平面中的点列表进行排序,并从具有最小y值的列表中选择一个点。
我用过
min(listPts, key=lambda t: (t[1], -t[0]))
在listPts中找到最小y值
我有一个函数theta来找到两点之间的角度
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
我想知道是否有可能以某种方式将此函数用作.sort()方法中的一个键,因为每个被检查的点都会有一个不同的theB点?
欢呼声
答案 0 :(得分:1)
是。 Read the documentation for list.sort
,它就在那里。参数甚至与min
具有相同的名称。
更新:如果我了解您的真实问题,theta
计算点之间的相对角度,并且您希望根据{{{>>对点对进行排序1}}以某种方式得分?
如果这是正确的,那么你真的需要一个多步骤的过程:
为此,您使用itertools.permutations
生成对(或先排序以获得一致的点排序,然后使用itertools.combinations
,这样您就不会为点{{1}创建对然后使用theta
对结果对进行排序,以按对象的相对角度对这些对进行排序。例如:
(A, B)
输出:
(B, A)
对应theta
的{{1}}值。