Algorithmus um Erstellung eines Dicts (am Ende) ergänzt, in welchem alle Segmente nach Rack_id-Index gespeichert werden und Anfangs bzw. Endpunkt enthalten. Zusammengehoerige Verbindungen mit gleichen Koordinaten gespeichert
This commit is contained in:
+29
-2
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user