2016-05-14 3 views
0

Ich habe eine Funktion, die eine Liste von Rects ausdruckt wie dieseWie findet man ein Rect, das einem gegebenen Rect am nächsten ist, aus einer Liste?

[<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)>] 

und ich bin für eine Art und Weise oben, um in einem bestimmten Rect die nächste Rect aus der Liste übereinstimmen.

Zum Beispiel würde ein gegebenes Rect wie dieses <rect(377, 231, 50, 70)> mit <rect(394, 224, 80, 100)> übereinstimmen und es ausdrucken.

Ich habe versucht, dass mit Tupel und Liste von Tupeln tun, indem Sie min Funktion wie diese

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) 

aber ich weiß nicht, wie ich würde es für Rect Datentyp zu arbeiten.

+2

Sie haben die richtige Idee von dem, was in Python, um Ihr Problem zu tun, ist, dass es nicht gut ist definiert, was der Abstand zwischen zwei Rects ist. Sollte es die Entfernung zwischen den Zentren sein? Der durchschnittliche Abstand zwischen den Ecken? Der durchschnittliche Abstand zwischen den Seiten? –

Antwort

0

Etwas Ähnliches, um den Abstand zwischen den Zentren als Decider mit:

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 
Verwandte Themen