In che modo i programmatori grafici gestiscono i vertici di rendering che non cambiano l'immagine?


10

Quindi, il titolo è un po 'imbarazzante. Darò alcuni retroscena e poi farò la mia domanda.

Contesto : lavoro come sviluppatore di applicazioni GIS Web , ma nel mio tempo libero ho giocato con il rendering delle mappe e il miglioramento dei formati di scambio di dati. Lavoro solo nello spazio 2D.

Un problema interessante che ho riscontrato è che quando si esegue il rendering di un poligono su piccola scala (ingrandito), molti dei vertici sono ridondanti. Un caso estremo sarebbe che hai un poligono con 500.000 vertici che occupa solo un singolo pixel. Se stai inviando questi dati al browser, sarebbe logico omettere ~ 499.999 di quei vertici. Un modo per raggiungerlo è il rendering di un'immagine su un server e l'invio come PNG: voilà, è un punto. A volte, tuttavia, vogliamo che i dati vengano inviati al browser in modo che possano essere visualizzati con SVG (o canvas o webgl) in modo che possano essere interattivi.

Il problema : risulta che, utilizzando i moderni set di dati geografici, è molto facile sovraccaricare le capacità di rendering di SVG. Nel tentativo di far fronte a tali limiti, sto cercando di capire come ridurre visivamente senza perdita di dati un set di dati per una data scala e estensione della mappa (e, se necessario, per una larghezza e altezza dei pixel della mappa nota).

Ho ottenuto una notevole riduzione delle dimensioni dei dati semplicemente usando l' algoritmo Douglas-Peucker e credo di essere riuscito a mantenerlo fedele ai poligoni entro un pixel. Sfortunatamente, Douglas-Peucker non conserva la topologia, quindi ha cambiato il modo in cui sono stati resi i bordi tra i poligoni. Non sono riuscito a trovare facilmente altri algoritmi da provare e adattare allo scopo, ma non ho molti background CS / algoritmo e potrei non riconoscerli se li vedessi.


1
Google per "Douglas-Peucker coerentemente topologicamente" e troverai alcuni link agli abstract di alcuni articoli. Sfortunatamente, devi pagare per gli articoli completi che ho visto.
Doc Brown,

@DocBrown Grazie! Questia sembra addirittura avere una prova gratuita.
canisrufus,

Risposte:


3

Quello che stai cercando è 2d level of detail algorithms.

C'è molto documentato su questo su Google se cerchi quei termini evidenziati.

Questa domanda su StackOverflow contiene le informazioni che stai cercando sul rendering del livello di dettaglio 2D.


+1 per il vocabolario pertinente. Sembra che sto effettivamente utilizzando un approccio basato sul livello di dettaglio, ma ho bisogno di un algoritmo di semplificazione poligonale che soddisfi le mie esigenze. Ho trovato una panoramica accurata per quelli 3d. Credo di aver effettivamente elaborato un'adeguata strategia di semplificazione, anche se non ho avuto il tempo di codificarla.
canisrufus,
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.