2016-05-14 51 views
0

我有打印出Rects列表這樣如何從列表中找到最接近給定矩形的矩形?

[<rect(394, 28, 80, 100)>, <rect(394, 126, 80, 100)>, <rect(394, 224, 80, 100)>, <rect(472, 28, 80, 100)>, <rect(472, 126, 80, 100)>] 

的功能,我正在尋找一種方式,以符合上述任何給定的矩形從列表中最接近的矩形。

例如,像這樣一個給定的Rect <rect(377, 231, 50, 70)>將與<rect(394, 224, 80, 100)>匹配並打印出來。

我已經試過這樣做,與元組和元組的列表,通過使用min函數這樣

temp_list = [(1, 3), (4, 9), (5, 7), (3, 5), (9, 4), (8, 4), (6, 1)] 
temp_tuple = (5, 11) 

nearest = min(temp_list, key=lambda c: (c[0] - temp_tuple[0]) ** 2 + (c[1] - temp_tuple[1]) ** 2) 

print(nearest) 

,但我不知道我怎麼會做它矩形數據類型。

+2

,您已經對Python的做什麼正確的觀念,你的問題是,它沒有很好地界定哪兩個rects之間的距離是。它應該是中心之間的距離嗎?角落之間的平均距離?雙方的平均距離? –

回答

0

這樣的事情,使用中心之間的距離爲決勝局:

import math 

distance = 1000 

current_cx = current_rect.centerx 
current_cy = current_rect.centery 

for rect in rect_list: 
    cx = rect.centerx 
    cy = rect.centery 

    if math.sqrt(abs(current_cx-cx)**2 + abs(current_cy-cy)**2)) < distance: 
     nearest_rect = rect 
相關問題