ProblemaRimozione coppie duplicate di un elenco <object>
Sto mostrando una geometria utilizzando linee semplici in una libreria 3D WPF. Un esempio di esso potrebbe essere visto nella figura seguente:
In esso si può vedere una serie di triangoli e quadrati. Il modo in cui sto tramando questo è che fornisco uno List<Point3D>
in cui metto coppie di punti che rappresentano ciascun segmento.
Il problema è che ci sono molti bordi duplicati e vorrei evitare questo dato che questo tipo di rappresentazione sembra essere molto impegnativo.
L'elenco di punti viene generato iterando su ogni Element
che contiene N vertici. Non è a conoscenza se un determinato bordo è condiviso o meno.
<p0, p1, p1, p2, p2, p333, p333, p89, p89, p2, p2, p1 ...>
L'idea sarebbe quella di rimuovere le coppie ripetute (si noti che l'ordine potrebbe non essere lo stesso). Nell'esempio sopra la coppia rimossa dovrebbe essere l'ultima (p2, p1), poiché rappresenta lo stesso bordo della seconda coppia di punti (p1, p2). Potrebbero esserci una, due o più coppie di punti duplicate.
Ho bisogno di fare questa operazione il più velocemente possibile, le prestazioni sono migliori qui.
Idee
Mentre l'aggiunta di punti nella lista ho potuto memorizzare temporaneamente due di loro e verificare se la lista li contiene già, ma questo implica cercando in un elenco ogni volta aggiungo un punto e non lo fa mi sembra una buona idea (la lista conterrà diverse migliaia di punti 5000-50000).
Gli elementi di cui generi l'elenco di punti hanno diversi nodi con un ID univoco, quindi penso che potrebbe essere utilizzato in qualche modo creando uno Tuple<Point3D, Point3D>
ordinato e quindi rimuovendo gli elementi duplicati.
Non ho provato l'ultima idea perché non sono sicuro di come implementarlo ancora, e mi piacerebbe sentire se c'è qualche altra cosa che può essere fatta.
L'esempio fornisce solo un elenco di punti che non hanno alcuna connessione. Sarebbe facile se rappresentato come coppie/tuple. Basta scrivere un comparatore che ti dice se vengono utilizzate le stesse coordinate, il che significa che sono uguali e che possono essere rimosse. –
Questo elenco viene interpretato in modo che ogni coppia venga convertita in un segmento. Penso che confrontando l'ID del nodo sarebbe molto più veloce rispetto alle coordinate. – Sturm