2012-12-12 6 views
5

Eventuali duplicati:
Rasterizing a 2D polygonEsiste un algoritmo standard efficiente per RASTER un poligono compresa la zona interna

ho bisogno di raster un poligono compresa la zona interna (determinare tutte le tessere di una griglia che si trova all'interno del poligono). Attualmente determino le tessere di confine usando un semplice Bresenham ma non ho modo fino ad ora di rasterizzare "l'interno" del poligono (che potrebbe essere anche concavo). Il mio approccio finora è quello di limitare l'intervallo di tessere al rettangolo includendo il poligono e quindi determinare per ogni centro di tessere se si trova all'interno o all'esterno utilizzando l'algoritmo di avvolgimento poligonale. Questo è inefficace perché implica il controllo di ogni segmento di contorno di poligono per ogni piastrella. Da un primo punto di vista dovrebbe esserci un approccio più rapido, ad es. qc. come l'avvolgimento usando il confine rasterizzato. Esiste un algoritmo standard che affronta questo problema e forse anche un'implementazione di libreria in C++?

+1

ci sono un bel po 'di risorse in rete. Qui ci sono i primi due che ho trovato con una ricerca su Google: http://alienryderflex.com/polygon_fill/ e http://ezekiel.vancouver.wsu.edu/~cs442/lectures/raster/polyfill/poly.pdf – NPE

+0

@Potatoswatter : Grazie per il link. Come ho detto, anch'io ho bisogno delle interiora e conosco la regola del vento, quindi penso che non sia un duplicato, ma la triangolazione e il rastering dei triangoli potrebbero essere la strada da percorrere. – Martin

+0

@NPE: Cool, il primo collegamento è esattamente quello che stavo cercando. Se lo fai una risposta, posso accettarlo subito – Martin

risposta

6

Ci sono un bel po 'di risorse in rete, ad esempio:

+0

Questo algoritmo non funzionerà con alcuni poligoni che hanno bordi paralleli all'asse con coordinate intere (coordinata y se la scanline è orizzontale, coordinata x se la scanline è verticale). Ad esempio, questo fallirà su un poligono di segmenti paralleli all'asse che rilegge una lettera T o П. – gvlasov

Problemi correlati