我有一个打印出像这样的
的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。
例如,像这样的给定的一个<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)
但我不知道如何让它适用于Rect数据类型。
答案 0 :(得分: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