Quali sono i vantaggi dell'utilizzo di Half Edge over Winged Edge?


9

Per la rappresentazione mesh, quali sono i vantaggi dell'utilizzo della struttura dati Half Edge over Winged Edge?

Capisco entrambe le rappresentazioni di mesh, l'unica differenza è che il mezzo bordo usa il bordo direzionale e il bordo alato usa il bordo non direzionale. Finora, non riesco a pensare a quale sia l'utilità dell'uso del bordo direzionale, ma dà solo più consumo di memoria.


1
"L'unica differenza è che il mezzo bordo usa il bordo direzionale e il bordo alato usa il bordo non direzionale." Secondo la mia comprensione, più simile a: Il mezzo bordo è doppiamente collegato (e ogni direzione può contenere informazioni aggiuntive), mentre il bordo alato è, più comunemente, solo in senso antiorario.
David Kuri,

Quindi, intendi il modo in cui usano doppiamente collegato semplicemente per aggiungere più informazioni in modo esplicito? Perché penso che usando Half Edge potrebbero esserci delle prestazioni ottenute per query specifiche dalla mesh. Ma fino ad ora, non riesco ancora a capire quale domanda ..
Bla ...

Mentre siamo sulle rappresentazioni dei bordi, questo è un ottimo documento, generalizzandone molti: graphics.cs.ucdavis.edu/~joy/ecs178/Unit-9/resources/…
Mikkel Gjoel

Risposte:


7

Per quanto ne so, il vantaggio principale del mezzo bordo è che l'attraversamento può essere un po 'più semplice a causa della garanzia di bordi con un orientamento coerente all'interno di ciascuna faccia.

Considera il problema di iterare su tutti i vertici o i bordi di una determinata faccia, in senso antiorario. Nella struttura a mezzo bordo, questo può essere fatto iniziando con un mezzo bordo arbitrario di quella faccia e semplicemente seguendo i puntatori "successivi" fino a tornare da dove hai iniziato.

Al contrario, farlo in una struttura a bordo alato è un po 'fastidioso, perché i bordi sono orientati arbitrariamente; qualsiasi dato bordo che incontri potrebbe puntare in senso orario o antiorario rispetto alla faccia che stai cercando di scorrere, quindi devi fare un controllo condizionale aggiuntivo ad ogni passo per vedere se dovresti attraversare il bordo corrente in avanti o indietro.

Altri tipi di query sulla connettività si comportano in modo simile: la versione a metà bordo consente di seguire i collegamenti in una sequenza coerente, mentre la versione a bordo alato richiede controlli di orientamento ad ogni passaggio.

Se i condizionali sono effettivamente un problema di prestazioni per il bordo alato probabilmente dipenderà da altri fattori. Per un'implementazione "ingenua" con puntatori in ogni modo e dati sparsi nella memoria, mi aspetto che la cache miss overhead sommerga qualsiasi effetto dei condizionali. D'altra parte, se si dispone di una struttura di dati molto compatta con tutto ciò che è caldo nella cache, è possibile vedere alcuni effetti dai condizionali a causa di previsioni di diramazione errate, ecc. È difficile da dire.

Lasciando le prestazioni da solo, preferirei il mezzo margine solo perché sembra più facile ragionare e scrivere il codice corretto, anche se si traduce in un leggero sovraccarico di memoria.

A proposito, ci sono un paio di altre scelte di progettazione con strutture dati mesh che spesso sembrano confuse con questa. Un commentatore ha menzionato il collegamento singolo o doppio, ma naturalmente è possibile eseguire il collegamento singolo o doppio con il bordo mezzo o alato. (Anche se non vedo come funzionerebbe anche il collegamento singolo con il bordo alato, poiché come menzionato sopra, potresti dover attraversare i bordi all'indietro o in avanti nel corso di una query.)

Inoltre, c'è la questione se il vertice e le strutture della faccia memorizzano un elenco di tutti i loro bordi, o solo uno (e richiedono di attraversare i bordi per trovare il resto). Avere un elenco di spigoli di lunghezza variabile per vertice / faccia complica notevolmente la logica se si desidera farlo in modo efficiente (cioè non avere un'allocazione di heap separata per vertice / faccia), ma di nuovo questo è indipendente dal fatto che i bordi siano a metà o alato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.