Durchlauf durch Liste und Vergleich der Einträge

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

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!
BlackJack

@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:

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)
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__()`).
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

klingt einleuchtend. Schau ma mal, ob ich das so hinkrieg... :-)
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

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?
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Also, nachfolgend meine 3 Listen:

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]
b) Linien (jeweils als Paar die FID der Linie und des Dreiecks) Bsp:(0,1): FID_Linie=0, gehört zum Dreieck mit der FID=1
  • [(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, 8), (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, 8), (53, 8)]
c) Points (jeweils pro Eintrag die FID der Linie und die dazugehörigen 2 Koordinaten mit ihrer FID und XYZ)
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]]])]
kann man damit weiterarbeiten?
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Die "Acht" hat er mir wohl in ein Smiley verwandelt...
BlackJack

@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.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

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
  • [[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]]]
lines: Bsp: Die Linie mit der FID=2 besteht aus den Punkten 4 und 5
  • [(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])]
triangles: Bsp: Das Dreieck mit der FID = 0 besteht aus den Linien 2, 18, 20
  • [(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])]
nachbarliste: Bsp. Das Dreieck 0 hat die Nachbarn 1 und 17
  • [(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), (8, 7), (8, 13), (9, 10), (9, 12), (10, 9), (10, 11), (11, 10), (11, 14), (12, 9), (13, 8), (13, 16), (14, 6), (14, 11), (15, 3), (15, 12), (16, 5), (16, 13), (17, 0), (17, 13)]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Das list-Tag ist übrigens für Aufzählungen gedacht und nicht für Python-Listen. Du solltest daher code-Tags verwenden, damit deine Beiträge wieder lesbar werden.
Das Leben ist wie ein Tennisball.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

hmmm... Wie soll ich jetzt weiter verfahren? Und wie kann ich ohne die FID auskommen? Da baut doch alles auf die FIDs auf!
BlackJack

@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:

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>)
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.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

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>)
BlackJack

@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))))``.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

@ 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)
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

hmmm... sonderlich viel weitergekommen bin ich wieder nicht :-(
Ich weiß einfach nicht, was ich dann als nächstes machen muss/soll...
Ich bin halt eine blutige Anfängerin und bitte (wieder mal) um Hilfe! Danke
BlackJack

@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.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Vielleicht folgendermaßen:

Objekt: Dreieck --> besteht aus Linien und Linien aus Punkten (Punkte sind definiert über XYZ)

Eigenschaft: 2 Dreiecke sind benachbart, wenn sie sich 1 Linie teilen

???
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Tut mir leid, dass ich so hilflos bin, aber ich weiß es wirklich nicht, wie ich vorgehen soll...
Und wie gesagt, ich bedanke mich nochmals bei jedem, der mir hilft.
BlackJack

@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.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

hmmm...
Kling für mich einfacher als es ist. Aber danke :-) !
Antworten