Algoritmo scan line: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Etichette: Nowiki inseriti da dispositivo mobile Modifica visuale |
m nuova chiave d'ordine per Categoria:Algoritmi geometrici: "Scan line" usando HotCat |
||
(13 versioni intermedie di 9 utenti non mostrate) | |||
Riga 1:
{{W|geometria|novembre 2014}}
'''Scan Line''' è un algoritmo per il filling efficente di poligoni.<br />▼
Dato un poligono, espresso sotto forma di segmenti (x<sub>min</sub>,y<sub>min</sub>,x<nowiki><sub>max</sub></nowiki>,Y<sub>max</sub>) , è possibile determinare i punti interni del poligono tracciando delle linee parallele all'asse x e calcolando le intersezioni con i segmenti del poligono. Ogni volta che una linea di scansione interseca un segmento del poligono, possiamo considerare i punti successivi, fino alla prossima intersezione, come interni. Tali gruppi di punti sono chiamati span, e rappresentano i pixel da colorare all'interno dell'immagine.<br />▼
I passi del processo per determinare gli span sono tre:<br />▼
[[File:Scan-line algorithm.svg|miniatura|destra|Esempio di Algoritmo scan-line]]
▲'''Scan Line''' è un [[algoritmo]] per
▲Dato un [[poligono]], espresso sotto forma di segmenti (x<sub>min</sub>,y<sub>min</sub>,x
# Determinare le intersezioni tra la scan-line e i poligoni
# Ordinare tali intersezioni secondo l'asse x
# Determinare i punti interni sfruttando le intersezioni sulla linea calcolate precedentemente
== L'
Prima di iniziare, dobbiamo creare una tabella per salvare i punti di intersezione tra i segmenti del poligono. Tale tabella è chiamata ET (Edge Table), è formata da (y<sub>max</sub> - y<sub>min</sub>) righe e contiene, ad ogni riga, una lista di segmenti che hanno come y<sub>min</sub> il valore y della scan-line. Un segmento all'interno della lista è rappresentato con la coordinata y<sub>max</sub> del segmento (l'estremo con y più grande), la coordinata x<sub>min</sub> del segmento e l'inverso della pendenza.
▲Prima di iniziare, dobbiamo creare una tabella per salvare i punti di intersezione tra i segmenti del poligono. Tale tabella è chiamata ET (Edge Table), è formata da (y<sub>max</sub> - y<sub>min</sub>) righe e contiene, ad ogni riga, una lista di segmenti che hanno come y<sub>min</sub> il valore y della scan-line. Un segmento all'interno della lista è rappresentato con la coordinata y<sub>max</sub> del segmento (l'estremo con y più grande), la coordinata x<sub>min</sub> del segmento e l'inverso della pendenza.<br />
Ora siamo pronti a determinare gli span per ogni scan-line: Si inizializza un'altra lista vuota, chiamata AET (Active Edge Table) per rappresentare gli spigoli attivi ad ogni scan-line.
Partendo dalla prima riga della lista ET, si aggiunge alla AET tale riga, calcolando gli span tramite la regola even-odd. La regola consiste in suddividere i punti della scan-line in interni ed esterni: all'inizio i punti sono esterni e, ad ogni intersezione con i lati del poligono, cambiano in interni (o viceversa, cambiando da interni a esterni). Non vanno considerati nella regola i lati parallele alla scan-line, ne il vertice più piccolo o più grande del poligono rispetto alla coordinata y<br />▼
▲Partendo dalla prima riga della lista ET, si aggiunge alla AET tale riga, calcolando gli span tramite la regola even-odd. La regola consiste in suddividere i punti della scan-line in interni ed esterni: all'inizio i punti sono esterni e, ad ogni intersezione con i lati del poligono, cambiano in interni (o viceversa, cambiando da interni a esterni). Non vanno considerati nella regola i lati parallele alla scan-line, ne il vertice più piccolo o più grande del poligono rispetto alla coordinata y
Successivamente si aggiorna la tabella AET sommando l'inverso della pendenza alla coordinata x del segmento, per ottenere la giusta posizione x per la scan-line successiva.
Una nota la merita la scelta dell'arrotondamento dei punti da considerare come interni: nella AET i punti x, ottenuti come somma di x<sub>min</sub> con l'inverso della pendenza, non assumeranno valori interi. Per applicare la regola even-odd, dunque, è necessario arrotondare i punti x delle intersezioni della scan-line con i segmenti del poligono. In particolare, se si passa da punti interni ad esterni, si arrotonda la coordinata x del punto all'intero più grande, mentre se si passa da punti interni a punti esterni, si arrotonda all'intero più piccolo
==Collegamenti esterni==
{{Portale|matematica}}
[[Categoria:Computer grafica]]
▲La colorazione prosegue finchè ET è vuota
[[Categoria:Algoritmi geometrici|Scan line]]
▲<ref>http://medialab.di.unipi.it/web/IUM/Fondamenti/cap4.htm</ref>
|