二维列表的多重比较
Multiple Comparisons for 2D list
我有以下形式的二维列表:
xyPositions = [[474, 318], [543, 432], [633, 328], [548, 514]]
有时在这些列表中有 4(如此处)、8、10、12 或 16 对 xy 坐标。
我编写的以下小函数将测试两组 x y 坐标是否重叠,例如,dotOverlap( [55, 99], [399, 88] )
但是,我有点不好意思地说我想不出一种简单的方法来测试所有可能的重叠情况(即成对比较):
# #
1 to 2
1 to 3
1 to 4
2 to 3
2 to 4
3 to 4
我如何以编程方式执行此操作?
from math import sqrt
ClearanceRadius = 7 # pixels
def dotOverlap(p1, p2):
x1 = p1[0]
y1 = p1[1]
x2 = p2[0]
y2 = p2[1]
overLapTest = None
d = sqrt( (y2 - y1)**2 + (x2 - x1)**2 )
if ClearanceRadius*2 < d:
overLapTest = False
elif ClearanceRadius*2 > d:
overLapTest = True
return(overLapTest)
您可以使用 itertools.combinations
生成所有组合,然后您可以通过您的函数将这些组合一一解包,就像这样
>>> from itertools import combinations
>>> xyPositions = [[474, 318], [543, 432], [633, 328], [548, 514]]
>>> [dotOverlap(*items) for items in combinations(xyPositions, r=2)]
[False, False, False, False, False, False]
我有以下形式的二维列表:
xyPositions = [[474, 318], [543, 432], [633, 328], [548, 514]]
有时在这些列表中有 4(如此处)、8、10、12 或 16 对 xy 坐标。
我编写的以下小函数将测试两组 x y 坐标是否重叠,例如,dotOverlap( [55, 99], [399, 88] )
但是,我有点不好意思地说我想不出一种简单的方法来测试所有可能的重叠情况(即成对比较):
# #
1 to 2
1 to 3
1 to 4
2 to 3
2 to 4
3 to 4
我如何以编程方式执行此操作?
from math import sqrt
ClearanceRadius = 7 # pixels
def dotOverlap(p1, p2):
x1 = p1[0]
y1 = p1[1]
x2 = p2[0]
y2 = p2[1]
overLapTest = None
d = sqrt( (y2 - y1)**2 + (x2 - x1)**2 )
if ClearanceRadius*2 < d:
overLapTest = False
elif ClearanceRadius*2 > d:
overLapTest = True
return(overLapTest)
您可以使用 itertools.combinations
生成所有组合,然后您可以通过您的函数将这些组合一一解包,就像这样
>>> from itertools import combinations
>>> xyPositions = [[474, 318], [543, 432], [633, 328], [548, 514]]
>>> [dotOverlap(*items) for items in combinations(xyPositions, r=2)]
[False, False, False, False, False, False]