Cosa sono i poligoni degeneri? Come si controlla se una determinata coppia di poligoni è degenerata o no?
Cosa sono i poligoni degeneri? Come si controlla se una determinata coppia di poligoni è degenerata o no?
Risposte:
Un poligono è degenerato se alcuni dei suoi vertici si trovano uno sull'altro. ad es. il triangolo (0,0), (0,1), (0,0) è degenerato. Ha 3 lati e 3 vertici, ma due di vertici si ripetono. È possibile ripetere più volte un vertice (ad esempio (0,0), (0,0), (0,0) è un altro triangolo degenerato). Per definizione, controllare se un poligono è degenerato o meno è facile.
Ma quali sono gli usi dei poligoni degeneri? Un'applicazione dall'accelerazione grafica (disegno 3D) è la seguente:
Nel disegno 3D le GPU normalmente usano la triangolazione per il rendering delle immagini. La (semplice) ragione per usare i triangoli è perché sono oggetti 2D più semplici possibili, quindi non hanno bisogno di molto hardware.
Se vogliamo disegnare un'immagine 3D complessa, con questa limitazione GPU, dobbiamo scomporla in più triangoli. Ma se chiamiamo la GPU per renderizzare ciascun triangolo separatamente, sarebbe molto lento (a causa del numero di chiamate). Quindi la striscia triangolare viene utilizzata per ridurre il numero di chiamate alla GPU. Una buona spiegazione delle strisce triangolari può essere trovata nella documentazione Microsoft: Triangle Strips , inoltre puoi vedere il wiki per: Triangle Strip .
Ma il problema sorge quando vogliamo disegnare due oggetti separati in una striscia. In questo caso i triangoli degenerati aiutano. La GPU può rilevare i triangoli degeneri e saltare il loro disegno. Quindi possiamo collegare due strisce separate con un triangolo degenerato.
In generale, se disponiamo di componenti diversi, in modo tale da disporre già delle corrispondenti strisce triangolari, possiamo disegnarli tutti con una sola chiamata alla GPU. Ciò causa un ulteriore utilizzo della memoria, ma è un compromesso tra il numero di chiamate alla GPU per il rendering e il sovraccarico dell'uso di un triangolo aggiuntivo e degenerato.
Un poligono degenerato è uno che ha un'area zero.
Come altri hanno notato, dipende. In generale, un poligono non è degenerato se non ha punti anomali, ma questo fa tornare indietro il problema di un passo; cos'è "anomalo"?
La vera risposta è che un poligono è degenerato se viola le specifiche. La risposta leggermente scortese è che un poligono è degenerato se si tratta di un caso limite che l'algoritmo non è in grado di gestire.
Ecco un esempio dal mondo di GIS. La specifica delle caratteristiche semplici OGC ha una definizione molto attenta di ciò che rende un poligono "valido". Citando dalla Sezione 6.1.11.1:
Le affermazioni per i poligoni (le regole che definiscono i poligoni validi) sono le seguenti:
a) i poligoni sono topologicamente chiusi;
b) Il confine di un poligono è costituito da un insieme di anelli lineari che ne compongono i confini esterni e interni;
c) Non ci sono due Anelli nella croce di confine e gli Anelli nel limite di un Poligono possono intersecarsi in un Punto ma solo come tangenti, ad es.
Nota: quest'ultima condizione afferma che in un punto comune alle due curve, i punti vicini non possono essere comuni. Questo obbliga ogni punto comune ad essere un punto di tangenza.
e) L'interno di ogni poligono è un insieme di punti collegati;
f) L'esterno di un poligono con 1 o più fori non è collegato. Ogni foro definisce un componente collegato dell'esterno.
Nelle affermazioni di cui sopra, interno, chiusura ed esterno hanno le definizioni topologiche standard. La combinazione di (a) e (c) rende un poligono un normale insieme di punti chiusi.