Die Fragestellung ist etwas komplexer: Ich habe ein Netz, welches aus Dreiecken aufgebaut ist. Ein jedes Dreieck besteht aus 3 Linien, jede Linie wiederum aus 2 Punkten. Diese Informationen habe ich folgendermaßen in einer Liste (Listenname = Endliste3) abgespeicher:
Ein Element einer Liste sieht folgendermaßen aus:
[FID_Dreieck, FID_Linie, [[FID_PUNKT1, [X_Koordinate, Y_Koordinate, Z_Koordinate], [FID_PUNKT2, [X_Koordinate, Y_Koordinate, Z_Koordinate]]]
Wenn 2 Dreiecke benachbart sind, so stimmen die Koordinaten (XYZ) einer Linie überein, die FID_LINIE und FID_PUNKT1 und FID_PUNKT2 sind aber unterschiedlich
Nun soll beim Dreieck mit der FID_Dreieck = 0 begonnen werden. Der Wert der FID_Dreieck soll mit 0 überschrieben werden und in eine neue Liste (Listenname=owner) geschrieben werden (das erste Element, das ich betrachte). Dann soll ein benachbartes Dreieck gefunden werden. Für dieses Dreieck soll der FID_Dreieck mit 1 überschrieben und in eine weitere Liste geschrieben werden (Listenname=neighbour) (das 2. Dreieck, das ich betrachte). Gleichzeitig sollen in eine dritte Liste die FID der Punkte der gemeinsamen Linie geschrieben werden (Listenname=internal_faces). Wenn das gemacht wurde, soll vom Owner zum Neigbour gegangen werden, sprich ich suche dann vom Dreieck, welches vorher als Neighbour identifiziert worden war und nun der neue Owner ist, die weiterenen Nachbarn über das selbe Verfahren, bis ich durch alle Dreiecke durchiteriert habe. Sprich, so muss in die Owner-Liste eine 1 für das 2. Dreieck geschrieben werden und in die Neigbour-Liste eine 2 für den neu gefundenen Nachbarn usw.
Ich habe auch schon versucht, einen Code zu verfassen und bitte um Hilfe. Danke (wie bereits erwähnt) schon im Voraus!
Code: Alles auswählen
erstes_Tri = Endliste3[0] # vorher hab ich die Liste nach dem 0. Eintrag sortiert, sodass das 0. Element die FID_Dreieck = 0 hat
tri_index_Start = erstes_Tri[0]
tri_index_aktuell = 99999999999999
#while tri_index_Start != tri_index_aktuell: --> solange nicht durch alle Elemente durch
# for t in Endliste3: # iteriere durch alle Elemente der Liste,
# wenn die Koordinaten einer Linie zweier unterschiedlicher Dreiecke gleich sind
# if erstes_Tri[2][0][1] == t[2][0][1] and erstes_Tri[2][1][1] == t[2][1][1] and erstes_Tri[0] != t[0]:
#schreibe überschreibe FID_Dreieck mit laufender Nummer
#FID_Dreieck = laufende_Nummer --> nicht lauffähig
#füge die neue FID_Dreieck zur Liste owner hinzu.
# owner.append(FID_Dreieck) --> das hier ist noch nicht lauffähig
# internal_faces.append(erstes_Tri[2][0][0]) #--> FID_Linie in die Liste internal_faces schreiben
# internal_faces.append(erstes_Tri[2][1][0])# --> FID_Linie in die Liste internal_faces schreiben
# schreibe überschreibe die FID_Dreieck des Nachbarn mit der nächst höheren Laufvariablen
# und füge die neue FID_Dreieck der Liste neighbour zu
#FID_Dreieck = laufende_Nummer+1
# neighbour.append(FID_Dreieck) --> nicht lauffähig
# --> gehe vom Owner zu neigbour
# --> und verfahre weiter: setze FID_owner = neue Laufvariable und ....
sehr verschachtelt das ganze und ich bin mir auch nicht sicher, ob es hierfür eine Lösung gibt. Freue mich aber über jeden Anstoß und über jede Hilfe.
Danke.