Qual è la differenza tra le varie curve di riempimento dello spazio?


14

Le curve di riempimento dello spazio sono importanti in molte applicazioni grafiche perché aiutano a esporre la località spaziale. Spesso sentiamo parlare di algoritmi diversi che utilizzano curve Z, codici Morton, curve di Hilbert, ecc. Quali sono le differenze tra alcune di queste diverse curve e come si applicano a varie applicazioni?



Vedere anche la sezione 2.1.1.2 delle basi di Samet per le strutture di dati multidimensionali e metriche .
IF

Risposte:


13

La differenza è quanto bene una mappatura preserva la località e quanto sia facile codificare / decodificare le chiavi. L'articolo "Clustering lineare di oggetti con attributi multipli" di HV Jagadish afferma: "Attraverso l'analisi algebrica e la simulazione al computer, abbiamo dimostrato che nella maggior parte dei casi, la mappatura di Hilbert ha funzionato così come o meglio della migliore delle mappature alternative suggerite in la letteratura". D'altra parte, l'ordine z è un po 'più semplice da usare, ad esempio confrontare i vari metodi elencati in Bit Twiddling Hacks per z-order e Wikipedia per Hilbert-order.

Per quanto riguarda le applicazioni, penso che il vantaggio principale nell'uso delle curve di riempimento dello spazio sia che mappano i punti dallo spazio di dimensione superiore allo spazio di dimensione inferiore. Ad esempio, consentono di eseguire query nella finestra per i punti utilizzando l'indice del database B-tree tradizionale. Ancora una volta, d'altra parte, lo svantaggio è che è necessario conoscere in anticipo i limiti dell'input poiché è difficile "ridimensionare" la mappatura in un secondo momento.

PS: "Curva Z" equivale a "Codice mortone".

PPS: mappature aggiuntive includono la curva di Peano e per le applicazioni vedi anche Geohash .


9

Queste curve di riempimento dello spazio consentono di mantenere la località in più dimensioni quando si "cammina" in modo lineare lungo la curva.

Da quello che ho visto, Z-Order (noto anche come codice Morton) è il più impiegato a causa del suo costo computazionale che è costante (ed economico) per accedere direttamente a qualsiasi punto della curva. (E facile da implementare in hardware con penalità di 0 cicli, poiché corrisponde a "solo commutazione" dei fili degli indirizzi).

Un esempio concreto di curva Z-Order è lo swizzling delle texture: che sta sostanzialmente aumentando il tasso di hit della cache per le texture lette sulle GPU. (Vedi le immagini nell'articolo su Z-Curve https://en.wikipedia.org/wiki/Z-order_curve )

Se la trama viene semplicemente memorizzata in modo lineare, si ottiene il massimo successo della cache se si esegue il rendering della sola trama come immagine 2D, ma se la si ruota di 90 gradi sullo schermo, si entra nello scenario peggiore (mancata cache per ogni trama letta) .

Di conseguenza, è meglio compensare un po 'e ridurre lo scenario migliore e avere un migliore riscontro nella cache per la maggior parte degli schemi.

Come nota personale, da quello che ho visto, altre curve potrebbero richiedere un passo ricorsivo per il loro calcolo e comportare un costo maggiore rispetto alla curva Z con un guadagno minimo in termini di coerenza della località. Quindi, non ho sentito parlare di quella curva usata con uno scopo pratico, tranne che come argomento di ricerca nel rendering matematico o creativo / divertente.

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.