Emisjiusuwania duplikatów pary z listy <object>
ja wyświetlania geometrii za pomocą prostych linii w bibliotece 3D WPF. Przykładem tego może być postrzegane w następnym zdjęciu:
W nim można zobaczyć zbiór trójkątów i quadów. Sposób, w jaki to wykreślam, polega na tym, że zapewniam List<Point3D>
, w której umieszczam pary punktów reprezentujących każdy segment.
Problem polega na tym, że istnieje wiele zduplikowanych krawędzi i chciałbym tego uniknąć, ponieważ ten rodzaj reprezentacji wydaje się być bardzo wymagającym zasobem.
Lista punktów jest generowana powtarzanie nad każdym Element
, który zawiera N wierzchołków. Nie wiadomo, czy dana krawędź jest udostępniona czy nie.
<p0, p1, p1, p2, p2, p333, p333, p89, p89, p2, p2, p1 ...>
Pomysł byłoby usunąć powtarzające się pary (zauważ, że zamówienie nie może być taka sama). W powyższym przykładzie usunięta para powinna być ostatnią (p2, p1), ponieważ reprezentuje tę samą krawędź co druga para punktów (p1, p2). Może istnieć jedna, dwie lub więcej podwójnych par punktów.
Muszę wykonać tę operację tak szybko, jak to możliwe, wydajność jest tu najwyższą wartością.
Pomysły
Podczas dodawania punktów na liście mogę przechowywać tymczasowo dwie z nich i sprawdzić, czy lista zawiera ich już, ale oznacza to, patrząc na listę za każdym razem dodawać punkt i nie wydaje mi się to dobrym pomysłem (lista będzie zawierała kilka tysięcy punktów 5000-50000).
Elementy, z których generuję listę punktów, mają kilka węzłów z unikalnym identyfikatorem, więc myślę, że można go w jakiś sposób wykorzystać, tworząc Dictionary
zamówionego Tuple<Point3D, Point3D>
, a następnie usuwając zduplikowane elementy.
Nie próbowałem tego ostatniego pomysłu, ponieważ nie jestem jeszcze pewien, jak go wdrożyć, i chciałbym usłyszeć, czy jest jakaś inna rzecz, którą można zrobić.
Twój przykład podaje listę punktów, które nie mają połączenia. Byłoby łatwo, gdyby było reprezentowane jako pary/krotki. Wystarczy napisać porównywarkę, która wskaże, czy używane są te same współrzędne, co oznacza, że są one takie same i można je usunąć. –
Ta lista jest interpretowana w taki sposób, że każda para jest przekształcana w segment. Myślę, że porównanie identyfikatora węzła byłoby znacznie szybsze niż patrzenie na współrzędne. – Sturm