Das bedeutet auch, dass ich eine Funktion schreiben soll, in der eben verglichen wird, ob die beiden Dreiecke benachbart sind. Das hatte ich vorher in ein den Quellcode einfach so implementiert, ohne Funktion (die ganzen if-Abfragen)
und: ja, die FID brauch ich nachher noch
vielen herzlichen Dank, dass du mir hilfst!
Durchlauf durch Liste und Vergleich der Einträge
@Michi_J: Das ist wenn man objektorientiert denkt eine Frage die man an ein Dreieck stellen kann, ob ein anderes Dreieck benachbart ist.
Und da könnte man das wieder sehr einfach formulieren: Zwei Dreiecke teilen sich eine Linie wenn für irgendein Paar `(a, b)`, mit `a` aus den Linien des Dreiecks, das man befragt und `b` aus den Linien des anderen Dreiecks, ``a == b`` gilt. In Quelltext könnte das so aussehen:
Die Aufgabe zwei Linien auf Gleichheit zu überprüfen, würde wieder woanders gelöst; nämlich in einer Methode auf den Linien-Objekten (`__cmp__()` oder `__eq__()`).
Und da könnte man das wieder sehr einfach formulieren: Zwei Dreiecke teilen sich eine Linie wenn für irgendein Paar `(a, b)`, mit `a` aus den Linien des Dreiecks, das man befragt und `b` aus den Linien des anderen Dreiecks, ``a == b`` gilt. In Quelltext könnte das so aussehen:
Code: Alles auswählen
class Triangle(object):
# ...
def has_shared_line_with(self, other):
return any(a == b for a in self.lines for b in other.lines)
mein erster Schritt ist aber dann schon der, dass ich mir 3 Listen (Dreiecke, Linien, Punkte), wo folgende Informationen gespeichert sind:
Dreiecke: FID-Dreiecke
Linien: FID-Linie und FID-Dreieck (zu welchem sie gehören)
Punkte: FID-Punkt und FID-Linie (zu welcher sie gehören)
entspricht dies dann den 3 Klassen oder ist das wieder etwas anderes?
Dreiecke: FID-Dreiecke
Linien: FID-Linie und FID-Dreieck (zu welchem sie gehören)
Punkte: FID-Punkt und FID-Linie (zu welcher sie gehören)
entspricht dies dann den 3 Klassen oder ist das wieder etwas anderes?
Also, nachfolgend meine 3 Listen:
a) Dreiecksliste (mit der FID der Dreiecke) - ich habe 17 Dreiecke
Bsp (2, [[4, [-44125.5, 251484.5, 453.01429999999999]], [5, [-45625.5, 249824.5, 424.90600000000001]]]) ==
(FID_Linie, [[FID_Koordinate1, [X, Y, Z]], [FID_Koordinate2, [X, Y, Z]]])
a) Dreiecksliste (mit der FID der Dreiecke) - ich habe 17 Dreiecke
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
- [(0, 1), (1, 15), (2, 0), (3, 12), (4, 15), (5, 3), (6, 15), (7, 12), (8, 9), (9, 12), (10, 3), (11, 4), (12, 2), (13, 3), (14, 2), (15, 16), (16, 1), (17, 2), (18, 0), (19, 1), (20, 0), (21, 17), (22, 13), (23, 17), (24, 17), (25, 9), (26, 9), (27, 10), (28, 4), (29, 14), (30, 4), (31, 5), (32, 5), (33, 6), (34, 5), (35, 16), (36, 13), (37, 16), (38, , (39, 13), (40, 10), (41, 10), (42, 11), (43, 11), (44, 11), (45, 14), (46, 6), (47, 14), (48, 6), (49, 7), (50, 7), (51, 7), (52, , (53, ]
Bsp (2, [[4, [-44125.5, 251484.5, 453.01429999999999]], [5, [-45625.5, 249824.5, 424.90600000000001]]]) ==
(FID_Linie, [[FID_Koordinate1, [X, Y, Z]], [FID_Koordinate2, [X, Y, Z]]])
- [(2, [[4, [-44125.5, 251484.5, 453.01429999999999]], [5, [-45625.5, 249824.5, 424.90600000000001]]]), (18, [[36, [-45625.5, 249824.5, 424.90600000000001]], [37, [-47255.5, 254754.5, 408.16120000000001]]]), (20, [[40, [-47255.5, 254754.5, 408.16120000000001]], [41, [-44125.5, 251484.5, 453.01429999999999]]]), (0, [[0, [-45625.5, 249824.5, 424.90600000000001]], [1, [-46505.5, 249454.5, 423.92090000000002]]]), (16, [[32, [-46505.5, 249454.5, 423.92090000000002]], [33, [-47255.5, 254754.5, 408.16120000000001]]]), (19, [[38, [-45625.5, 249824.5, 424.90600000000001]], [39, [-47255.5, 254754.5, 408.16120000000001]]]), (12, [[24, [-46505.5, 249454.5, 423.92090000000002]], [25, [-47265.5, 254754.5, 408.0419]]]), (14, [[28, [-47265.5, 254754.5, 408.0419]], [29, [-47255.5, 254754.5, 408.16120000000001]]]), (17, [[34, [-46505.5, 249454.5, 423.92090000000002]], [35, [-47255.5, 254754.5, 408.16120000000001]]]), (5, [[10, [-46505.5, 249454.5, 423.92090000000002]], [11, [-48415.5, 254624.5, 399.47649999999999]]]), (10, [[20, [-48415.5, 254624.5, 399.47649999999999]], [21, [-47265.5, 254754.5, 408.0419]]]), (13, [[26, [-46505.5, 249454.5, 423.92090000000002]], [27, [-47265.5, 254754.5, 408.0419]]]), (11, [[22, [-48415.5, 254624.5, 399.47649999999999]], [23, [-47265.5, 254754.5, 408.0419]]]), (28, [[56, [-48415.5, 254624.5, 399.47649999999999]], [57, [-47265.5, 254764.5, 408.0222]]]), (30, [[60, [-47265.5, 254764.5, 408.0222]], [61, [-47265.5, 254754.5, 408.0419]]]), (31, [[62, [-47265.5, 254764.5, 408.0222]], [63, [-47265.5, 254754.5, 408.0419]]]), (32, [[64, [-47265.5, 254764.5, 408.0222]], [65, [-47255.5, 254764.5, 408.096]]]), (34, [[68, [-47255.5, 254764.5, 408.096]], [69, [-47265.5, 254754.5, 408.0419]]]), (33, [[66, [-47265.5, 254764.5, 408.0222]], [67, [-47255.5, 254764.5, 408.096]]]), (46, [[92, [-47265.5, 254764.5, 408.0222]], [93, [-49255.5, 258014.5, 431.06569999999999]]]), (48, [[96, [-49255.5, 258014.5, 431.06569999999999]], [97, [-47255.5, 254764.5, 408.096]]]), (49, [[98, [-49255.5, 258014.5, 431.06569999999999]], [99, [-47255.5, 254764.5, 408.096]]]), (50, [[100, [-49255.5, 258014.5, 431.06569999999999]], [101, [-43915.5, 258794.5, 414.2158]]]), (51, [[102, [-43915.5, 258794.5, 414.2158]], [103, [-47255.5, 254764.5, 408.096]]]), (38, [[76, [-45435.5, 254754.5, 408.15609999999998]], [77, [-47255.5, 254764.5, 408.096]]]), (52, [[104, [-43915.5, 258794.5, 414.2158]], [105, [-47255.5, 254764.5, 408.096]]]), (53, [[106, [-43915.5, 258794.5, 414.2158]], [107, [-45435.5, 254754.5, 408.15609999999998]]]), (8, [[16, [-48415.5, 254624.5, 399.47649999999999]], [17, [-49995.5, 254754.5, 402.4579]]]), (25, [[50, [-49995.5, 254754.5, 402.4579]], [51, [-49995.5, 254764.5, 402.11309999999997]]]), (26, [[52, [-49995.5, 254764.5, 402.11309999999997]], [53, [-48415.5, 254624.5, 399.47649999999999]]]), (27, [[54, [-49995.5, 254764.5, 402.11309999999997]], [55, [-48415.5, 254624.5, 399.47649999999999]]]), (40, [[80, [-49995.5, 254764.5, 402.11309999999997]], [81, [-49995.5, 257504.5, 398.87670000000003]]]), (41, [[82, [-49995.5, 257504.5, 398.87670000000003]], [83, [-48415.5, 254624.5, 399.47649999999999]]]), (42, [[84, [-49995.5, 257504.5, 398.87670000000003]], [85, [-48415.5, 254624.5, 399.47649999999999]]]), (43, [[86, [-49995.5, 257504.5, 398.87670000000003]], [87, [-49255.5, 258014.5, 431.06569999999999]]]), (44, [[88, [-49255.5, 258014.5, 431.06569999999999]], [89, [-48415.5, 254624.5, 399.47649999999999]]]), (3, [[6, [-48415.5, 254624.5, 399.47649999999999]], [7, [-49995.5, 249994.5, 409.14229999999998]]]), (7, [[14, [-49995.5, 249994.5, 409.14229999999998]], [15, [-49995.5, 254754.5, 402.4579]]]), (9, [[18, [-48415.5, 254624.5, 399.47649999999999]], [19, [-49995.5, 254754.5, 402.4579]]]), (22, [[44, [-45435.5, 254754.5, 408.15609999999998]], [45, [-47255.5, 254754.5, 408.16120000000001]]]), (36, [[72, [-47255.5, 254754.5, 408.16120000000001]], [73, [-47255.5, 254764.5, 408.096]]]), (39, [[78, [-45435.5, 254754.5, 408.15609999999998]], [79, [-47255.5, 254764.5, 408.096]]]), (29, [[58, [-48415.5, 254624.5, 399.47649999999999]], [59, [-47265.5, 254764.5, 408.0222]]]), (45, [[90, [-49255.5, 258014.5, 431.06569999999999]], [91, [-48415.5, 254624.5, 399.47649999999999]]]), (47, [[94, [-47265.5, 254764.5, 408.0222]], [95, [-49255.5, 258014.5, 431.06569999999999]]]), (1, [[2, [-46505.5, 249454.5, 423.92090000000002]], [3, [-49995.5, 249994.5, 409.14229999999998]]]), (4, [[8, [-48415.5, 254624.5, 399.47649999999999]], [9, [-49995.5, 249994.5, 409.14229999999998]]]), (6, [[12, [-46505.5, 249454.5, 423.92090000000002]], [13, [-48415.5, 254624.5, 399.47649999999999]]]), (15, [[30, [-47265.5, 254754.5, 408.0419]], [31, [-47255.5, 254754.5, 408.16120000000001]]]), (35, [[70, [-47255.5, 254764.5, 408.096]], [71, [-47265.5, 254754.5, 408.0419]]]), (37, [[74, [-47255.5, 254754.5, 408.16120000000001]], [75, [-47255.5, 254764.5, 408.096]]]), (21, [[42, [-47255.5, 254754.5, 408.16120000000001]], [43, [-44125.5, 251484.5, 453.01429999999999]]]), (23, [[46, [-45435.5, 254754.5, 408.15609999999998]], [47, [-47255.5, 254754.5, 408.16120000000001]]]), (24, [[48, [-45435.5, 254754.5, 408.15609999999998]], [49, [-44125.5, 251484.5, 453.01429999999999]]])]
@Michi_J: Damit kann man sicher irgendwie weiterarbeiten, aber es sind ja immer noch *verschiedene* Listen mit "primitiven" und teils verschachtelten Werten statt *einer* Liste mit Dreiecks-Objekten. Und hier spielen die FIDs auch noch eine Rolle -- die sollten für den Algorithmus zur Wegsuche egal sein. Dier werden ja nur später für die Aufbereitung des Ergebnisses benötigt.
hmmm, ich hab mir deine Anregungen nochmals durchgelesen und ich denke, die Listen sollten wohl eher folgendermaßen aussehen:
points: Der Punkt mit der FID 0 hat die Koordinaten X, Y, Z
points: Der Punkt mit der FID 0 hat die Koordinaten X, Y, Z
- [[0, [-45625.5, 249824.5, 424.90600000000001]], [1, [-46505.5, 249454.5, 423.92090000000002]], [2, [-46505.5, 249454.5, 423.92090000000002]], [3, [-49995.5, 249994.5, 409.14229999999998]], [4, [-44125.5, 251484.5, 453.01429999999999]], [5, [-45625.5, 249824.5, 424.90600000000001]], [6, [-48415.5, 254624.5, 399.47649999999999]], [7, [-49995.5, 249994.5, 409.14229999999998]], [8, [-48415.5, 254624.5, 399.47649999999999]], [9, [-49995.5, 249994.5, 409.14229999999998]], [10, [-46505.5, 249454.5, 423.92090000000002]], [11, [-48415.5, 254624.5, 399.47649999999999]], [12, [-46505.5, 249454.5, 423.92090000000002]], [13, [-48415.5, 254624.5, 399.47649999999999]], [14, [-49995.5, 249994.5, 409.14229999999998]], [15, [-49995.5, 254754.5, 402.4579]], [16, [-48415.5, 254624.5, 399.47649999999999]], [17, [-49995.5, 254754.5, 402.4579]], [18, [-48415.5, 254624.5, 399.47649999999999]], [19, [-49995.5, 254754.5, 402.4579]], [20, [-48415.5, 254624.5, 399.47649999999999]], [21, [-47265.5, 254754.5, 408.0419]], [22, [-48415.5, 254624.5, 399.47649999999999]], [23, [-47265.5, 254754.5, 408.0419]], [24, [-46505.5, 249454.5, 423.92090000000002]], [25, [-47265.5, 254754.5, 408.0419]], [26, [-46505.5, 249454.5, 423.92090000000002]], [27, [-47265.5, 254754.5, 408.0419]], [28, [-47265.5, 254754.5, 408.0419]], [29, [-47255.5, 254754.5, 408.16120000000001]], [30, [-47265.5, 254754.5, 408.0419]], [31, [-47255.5, 254754.5, 408.16120000000001]], [32, [-46505.5, 249454.5, 423.92090000000002]], [33, [-47255.5, 254754.5, 408.16120000000001]], [34, [-46505.5, 249454.5, 423.92090000000002]], [35, [-47255.5, 254754.5, 408.16120000000001]], [36, [-45625.5, 249824.5, 424.90600000000001]], [37, [-47255.5, 254754.5, 408.16120000000001]], [38, [-45625.5, 249824.5, 424.90600000000001]], [39, [-47255.5, 254754.5, 408.16120000000001]], [40, [-47255.5, 254754.5, 408.16120000000001]], [41, [-44125.5, 251484.5, 453.01429999999999]], [42, [-47255.5, 254754.5, 408.16120000000001]], [43, [-44125.5, 251484.5, 453.01429999999999]], [44, [-45435.5, 254754.5, 408.15609999999998]], [45, [-47255.5, 254754.5, 408.16120000000001]], [46, [-45435.5, 254754.5, 408.15609999999998]], [47, [-47255.5, 254754.5, 408.16120000000001]], [48, [-45435.5, 254754.5, 408.15609999999998]], [49, [-44125.5, 251484.5, 453.01429999999999]], [50, [-49995.5, 254754.5, 402.4579]], [51, [-49995.5, 254764.5, 402.11309999999997]], [52, [-49995.5, 254764.5, 402.11309999999997]], [53, [-48415.5, 254624.5, 399.47649999999999]], [54, [-49995.5, 254764.5, 402.11309999999997]], [55, [-48415.5, 254624.5, 399.47649999999999]], [56, [-48415.5, 254624.5, 399.47649999999999]], [57, [-47265.5, 254764.5, 408.0222]], [58, [-48415.5, 254624.5, 399.47649999999999]], [59, [-47265.5, 254764.5, 408.0222]], [60, [-47265.5, 254764.5, 408.0222]], [61, [-47265.5, 254754.5, 408.0419]], [62, [-47265.5, 254764.5, 408.0222]], [63, [-47265.5, 254754.5, 408.0419]], [64, [-47265.5, 254764.5, 408.0222]], [65, [-47255.5, 254764.5, 408.096]], [66, [-47265.5, 254764.5, 408.0222]], [67, [-47255.5, 254764.5, 408.096]], [68, [-47255.5, 254764.5, 408.096]], [69, [-47265.5, 254754.5, 408.0419]], [70, [-47255.5, 254764.5, 408.096]], [71, [-47265.5, 254754.5, 408.0419]], [72, [-47255.5, 254754.5, 408.16120000000001]], [73, [-47255.5, 254764.5, 408.096]], [74, [-47255.5, 254754.5, 408.16120000000001]], [75, [-47255.5, 254764.5, 408.096]], [76, [-45435.5, 254754.5, 408.15609999999998]], [77, [-47255.5, 254764.5, 408.096]], [78, [-45435.5, 254754.5, 408.15609999999998]], [79, [-47255.5, 254764.5, 408.096]], [80, [-49995.5, 254764.5, 402.11309999999997]], [81, [-49995.5, 257504.5, 398.87670000000003]], [82, [-49995.5, 257504.5, 398.87670000000003]], [83, [-48415.5, 254624.5, 399.47649999999999]], [84, [-49995.5, 257504.5, 398.87670000000003]], [85, [-48415.5, 254624.5, 399.47649999999999]], [86, [-49995.5, 257504.5, 398.87670000000003]], [87, [-49255.5, 258014.5, 431.06569999999999]], [88, [-49255.5, 258014.5, 431.06569999999999]], [89, [-48415.5, 254624.5, 399.47649999999999]], [90, [-49255.5, 258014.5, 431.06569999999999]], [91, [-48415.5, 254624.5, 399.47649999999999]], [92, [-47265.5, 254764.5, 408.0222]], [93, [-49255.5, 258014.5, 431.06569999999999]], [94, [-47265.5, 254764.5, 408.0222]], [95, [-49255.5, 258014.5, 431.06569999999999]], [96, [-49255.5, 258014.5, 431.06569999999999]], [97, [-47255.5, 254764.5, 408.096]], [98, [-49255.5, 258014.5, 431.06569999999999]], [99, [-47255.5, 254764.5, 408.096]], [100, [-49255.5, 258014.5, 431.06569999999999]], [101, [-43915.5, 258794.5, 414.2158]], [102, [-43915.5, 258794.5, 414.2158]], [103, [-47255.5, 254764.5, 408.096]], [104, [-43915.5, 258794.5, 414.2158]], [105, [-47255.5, 254764.5, 408.096]], [106, [-43915.5, 258794.5, 414.2158]], [107, [-45435.5, 254754.5, 408.15609999999998]]]
- [(2, [4, 5]), (18, [36, 37]), (20, [40, 41]), (0, [0, 1]), (16, [32, 33]), (19, [38, 39]), (12, [24, 25]), (14, [28, 29]), (17, [34, 35]), (5, [10, 11]), (10, [20, 21]), (13, [26, 27]), (11, [22, 23]), (28, [56, 57]), (30, [60, 61]), (31, [62, 63]), (32, [64, 65]), (34, [68, 69]), (33, [66, 67]), (46, [92, 93]), (48, [96, 97]), (49, [98, 99]), (50, [100, 101]), (51, [102, 103]), (38, [76, 77]), (52, [104, 105]), (53, [106, 107]), (8, [16, 17]), (25, [50, 51]), (26, [52, 53]), (27, [54, 55]), (40, [80, 81]), (41, [82, 83]), (42, [84, 85]), (43, [86, 87]), (44, [88, 89]), (3, [6, 7]), (7, [14, 15]), (9, [18, 19]), (22, [44, 45]), (36, [72, 73]), (39, [78, 79]), (29, [58, 59]), (45, [90, 91]), (47, [94, 95]), (1, [2, 3]), (4, [8, 9]), (6, [12, 13]), (15, [30, 31]), (35, [70, 71]), (37, [74, 75]), (21, [42, 43]), (23, [46, 47]), (24, [48, 49])]
- [(0, [2, 18, 20]), (1, [0, 16, 19]), (2, [12, 14, 17]), (3, [5, 10, 13]), (4, [11, 28, 30]), (5, [31, 32, 34]), (6, [33, 46, 48]), (7, [49, 50, 51]), (8, [38, 52, 53]), (9, [8, 25, 26]), (10, [27, 40, 41]), (11, [42, 43, 44]), (12, [3, 7, 9]), (13, [22, 36, 39]), (14, [29, 45, 47]), (15, [1, 4, 6]), (16, [15, 35, 37]), (17, [21, 23, 24])]
- [(0, 1), (0, 17), (1, 0), (1, 2), (2, 1), (2, 3), (2, 16), (3, 2), (3, 4), (3, 15), (4, 5), (4, 14), (5, 4), (5, 6), (5, 16), (6, 7), (6, 14), (7, 6), (7, , (8, 7), (8, 13), (9, 10), (9, 12), (10, 9), (10, 11), (11, 10), (11, 14), (12, 9), (13, , (13, 16), (14, 6), (14, 11), (15, 3), (15, 12), (16, 5), (16, 13), (17, 0), (17, 13)]
@Michi_J: Wie schon gesagt, es sollte nur *eine* Liste geben. Du verteilst die Informationen auf zu viele Listen mit zu vielen nichtssagenden Datenstrukturen. Und innerhalb der Nachbarliste verteilst Du die gewünschte Information sogar noch auf mehrere Elemente.
Selbst wenn man das nur mit den Grunddatentypen lösen möchte, sind Listen nicht in allen Fällen die beste Lösung. Was Du von der Nachbarliste ja letztendlich wissen möchtest, ist "Welche Nachbarn hat Dreieck X?", und da will man ja nicht jedesmal eine Liste linear durchlaufen um alle Nachbarn zusammen zu sammeln.
Um vernünftig damit arbeiten zu können ohne irre zu werden und nach einem halben Jahr nicht mehr zu verstehen was in den Datenstrukturen steckt und was die ganzen "magischen Zahlen" bei der Indexerei in die Datenstrukturen bedeuten, sollte das Ergebnis von der Aufbereitung Deiner Ausgangsliste ungefähr so aussehen und zu benutzen sein:
Es gibt eine Liste mit Dreiecken, die jeweils ihre drei Linien und eine Menge von Nachbardreiecken kennen. Die Linien kennen ihre Punkte. Und die Punkte kennen ihre Koordinaten. Dreiecke, Linien, und Punkte kennen zusätzlich ihre FID für später, wenn man das ganze wieder in Listen überführen muss/will. Ansonsten braucht man die nicht, wenn man hat ja Objekte, die ihre eigene Identität haben.
Selbst wenn man das nur mit den Grunddatentypen lösen möchte, sind Listen nicht in allen Fällen die beste Lösung. Was Du von der Nachbarliste ja letztendlich wissen möchtest, ist "Welche Nachbarn hat Dreieck X?", und da will man ja nicht jedesmal eine Liste linear durchlaufen um alle Nachbarn zusammen zu sammeln.
Um vernünftig damit arbeiten zu können ohne irre zu werden und nach einem halben Jahr nicht mehr zu verstehen was in den Datenstrukturen steckt und was die ganzen "magischen Zahlen" bei der Indexerei in die Datenstrukturen bedeuten, sollte das Ergebnis von der Aufbereitung Deiner Ausgangsliste ungefähr so aussehen und zu benutzen sein:
Code: Alles auswählen
>>> triangles = create_mesh(TEST_DATA)
>>> triangles
[<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>,
<Triangle object>]
>>> triangles[0].fid
0
>>> triangles[0].lines
(<Line object>, <Line object>, <Line object>)
>>> triangles[0].neighbours
set([<Triangle object>, <Triangle object>])
>>> [t.fid for t in triangles[0].neighbours]
[17, 1]
>>> triangles[0].lines[0].points
(<Point object>, <Point object>)
hmmm... die Listen sehen bei mir immer so aus, weil ichs einfach nicht besser weiß. Ich hab noch nie mit Objekten gearbeitet und deshalb verstehe ich auch beispielsweise nachfolgenden Ausdruck nicht so ganz...
Code: Alles auswählen
(<Line object>, <Line object>, <Line object>)
@Michi_J: Mit Objekten hast Du ganz sicher schon gearbeitet, denn alles was man in Python an einen Namen binden kann, ist ein Objekt. Du hast wahrscheinlich nur noch keine eigenen Datentypen mittels Klassen geschrieben.
Die Zeile ist die `repr()`äsentation eines Tupels mit drei Linien-Objekten. So ungefähr sehen Objekte als Zeichenketten ausgegeben aus, wenn man bei der Klasse keine Methode implementiert, die festlegt, wie das Objekt bei `repr()` in eine Zeichenkette umgewandelt werden soll. Real wäre da bei CPython noch die Adresse im Speicher und der Modulname dabei. Also zum Beispiel so: ``<modulname.Line object at 0x9ded80c>``. Du könntest das natürlich auch überschreiben, um besser für die Fehlersuche gerüstet zu sein, dass zum Beispiel die FID mit ausgegeben wird (``<Line fid=2>``), oder sogar das dort eine Zeichenkette ausgegeben wird, die dem Quelltext entspricht, um wieder ein Objekt mit dem gleichen Zustand zu erzeugen. Wobei dass dann auch unübersichtlich werden könnte: ``Line(2, (Point(4, (-44125.5, 251484.5, 453.01429999999999)), Point(5, (-45625.5, 249824.5, 424.90600000000001))))``.
Die Zeile ist die `repr()`äsentation eines Tupels mit drei Linien-Objekten. So ungefähr sehen Objekte als Zeichenketten ausgegeben aus, wenn man bei der Klasse keine Methode implementiert, die festlegt, wie das Objekt bei `repr()` in eine Zeichenkette umgewandelt werden soll. Real wäre da bei CPython noch die Adresse im Speicher und der Modulname dabei. Also zum Beispiel so: ``<modulname.Line object at 0x9ded80c>``. Du könntest das natürlich auch überschreiben, um besser für die Fehlersuche gerüstet zu sein, dass zum Beispiel die FID mit ausgegeben wird (``<Line fid=2>``), oder sogar das dort eine Zeichenkette ausgegeben wird, die dem Quelltext entspricht, um wieder ein Objekt mit dem gleichen Zustand zu erzeugen. Wobei dass dann auch unübersichtlich werden könnte: ``Line(2, (Point(4, (-44125.5, 251484.5, 453.01429999999999)), Point(5, (-45625.5, 249824.5, 424.90600000000001))))``.
@ BlackJack: vielen Dank für deine Erläuternungen und generell für deine Hilfe. Ich glaube ansonsten sähe das ganze wohl etwas düster aus...
Aber Schritt für Schritt komme ich dem Ganzen etwas Näher (wenn auch nur in sehr kleinen Schritten, aber immerhin)
Aber Schritt für Schritt komme ich dem Ganzen etwas Näher (wenn auch nur in sehr kleinen Schritten, aber immerhin)
@Michi_J: Bist Du sicher das Dein Problem nicht schon irgendwer gelöst hat? Das klingt verdächtig nach triangle strips, die man zum Beispiel auch bei OpenGL erzeugt um zusammenhängende Dreiecke effizient zu speichern.
Ansonsten müsstest Du Dir überlegen welche Attribute und Eigenschaften Punkte, Linien, und Dreiecke als Objekte minimal haben müssten. Erst einmal nur um sie zu erstellen und dann um die Dreiecke zu einem Objektgraphen zu verbinden.
Ich würde sie als Wertobjekte implementieren, mit entsprechenden `__cmp__`- und `__hash__`-Implementierungen um sie als Schlüssel in Dictionaries bzw. Elemente in `set()`\s verwenden zu können.
Ansonsten müsstest Du Dir überlegen welche Attribute und Eigenschaften Punkte, Linien, und Dreiecke als Objekte minimal haben müssten. Erst einmal nur um sie zu erstellen und dann um die Dreiecke zu einem Objektgraphen zu verbinden.
Ich würde sie als Wertobjekte implementieren, mit entsprechenden `__cmp__`- und `__hash__`-Implementierungen um sie als Schlüssel in Dictionaries bzw. Elemente in `set()`\s verwenden zu können.
@Michi_J: Na dann fang doch einfach mal mit dem kleinsten Baustein an. Schreib eine `Point`-Klasse und dann eine Funktion die aus den Daten Punkt-Objekte erstellt. Und dann eine `Line`-Klasse, die aus den Daten und den Punkt-Objekten Linien-Objekte erstellt. Und dann… ich denke das Prinzip sollte klar sein.