2015-10-26 2 views
3

У меня есть 2D списки вида:Несколько Сравнения для списка 2D

xyPositions = [[474, 318], [543, 432], [633, 328], [548, 514]] 

Иногда Есть 4 (как здесь), 8, 10, 12 или 16 пары х координат в этих списках.

Следующие маленькая функция Я написал испытаю координаты ли два набора х перекрытия, е, г., 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) 

ответ

3

Вы можете использовать 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] 
Смежные вопросы