From c087e3ada9346675a5c2ee33531a7cbc836ccf29 Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Mon, 12 May 2025 17:25:26 +0200 Subject: [PATCH] =?UTF-8?q?Algorithmus=20um=20Erstellung=20eines=20Dicts?= =?UTF-8?q?=20(am=20Ende)=20erg=C3=A4nzt,=20in=20welchem=20alle=20Segmente?= =?UTF-8?q?=20nach=20Rack=5Fid-Index=20gespeichert=20werden=20und=20Anfang?= =?UTF-8?q?s=20bzw.=20Endpunkt=20enthalten.=20Zusammengehoerige=20Verbindu?= =?UTF-8?q?ngen=20mit=20gleichen=20Koordinaten=20gespeichert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/linesweep_circle.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/linesweep_circle.py b/lib/linesweep_circle.py index efdd40d..09bd138 100644 --- a/lib/linesweep_circle.py +++ b/lib/linesweep_circle.py @@ -36,6 +36,7 @@ for rack_id, idx, line in rack_segments: # === 3. Verbindungen suchen === verbindungen = [] +endpoint_pinned = [] # === A: Echte Schnittpunkte zwischen Linien finden === ''' Alle Segmente mit allen überprüfen, um echte SP zu finden''' @@ -49,7 +50,7 @@ for i, (rack_id1, idx1, line1) in enumerate(rack_segments): inter = line1.intersection(line2) if inter.geom_type == "Point": print(f"✅ Exakter Schnittpunkt {inter} zwischen {rack_id1}_{idx1} und {rack_id2}_{idx2}") - verbindungen.append((rack_id1, rack_id2, inter)) + verbindungen.append((rack_id1, idx1, rack_id2, idx2, inter)) # === B: Näherungsweise Verbindung durch Toleranz-Kreise === @@ -78,10 +79,36 @@ for rack_id, idx, line in rack_segments: else: nearest = nearest_points(pt, contact)[1] print(f" 🟡 Kreisberührung bei {nearest} mit {rack_id}_{idx}") - verbindungen.append((rack_id, other_rack_id, nearest)) + verbindungen.append((rack_id, idx, other_rack_id, other_idx, nearest)) + + # Füge verschobenen Endpunkt zu Liste hinzu. [Punkt gehört zu Rack_Nr, alter Punkt, neuer Punkt, gepinnt an Target_Rack] + endpoint_pinned.append((other_rack_id, other_idx, pt, nearest, rack_id)) + break radius += tol_step +# === Endpunkte aktualisieren === +# Dict erstellen, dass mit dem Key "Rack_id - index" dahinter die Koordinaten von Anfang und Endpunkt speichert +d_racks_segments = dict() + +for rack_id, idx, linestring in rack_segments: + key = f"{rack_id}-{idx}" + d_racks_segments[key] = [Point(linestring.coords[0]), Point(linestring.coords[1])] #Alle Racks in ihrer eingelesenen Form zum Dict hinzufügen + +for rack_id, idx, old_pt, new_pt, taget_rack in endpoint_pinned: #Durch verschobene Endpunkte laufen... + key = f"{rack_id}-{idx}" + coords = d_racks_segments.get(key) + + if coords: #...und bei Übereinstimmung von Start oder Endkoordinate die ursprüngliche (eingelesene) mit der gepinnten überschreiben + # Vergleich mit Startpunkt + if Point(coords[0]).equals(old_pt): + coords[0] = Point(new_pt.x, new_pt.y) #.x bzw .y übergibt x bzw y Koordinate von Objekt POINT + # Vergleich mit Endpunkt + elif Point(coords[1]).equals(old_pt): + coords[1] = Point(new_pt.x, new_pt.y) + + d_racks_segments[key] = coords # aktualisieren + # === Ausgabe-Verbindungen === print("\n=== Gefundene Verbindungen ===") for v in verbindungen: