Rasterizzare un poligono in questa domanda consiste nel creare una serie di pixel binari che "rappresentano" il poligono. Il contrario di questo processo è facile da approssimare in tempo lineare al perimetro in pixel. Usa una "soglia di dettaglio" D per definire quanto sarà complesso il poligono. Quando D diminuisce, il poligono diventa più dettagliato.
Ricorda che questo è solo per poligoni e immagini 2D, non in 3D,
- Rimuovi l'interno dell'immagine se ce n'è una, quindi abbiamo un perimetro di 1 pixel di spessore
- Assegna un pixel "primo" arbitrario come pixel attivo e il primo punto sul nostro poligono
- Iterate in una direzione attorno all'immagine, utilizzando ciascun pixel come "pixel di prova"
- Per ciascun pixel di prova, tieni traccia dell'angolo minimo e massimo tra il pixel attivo e i nostri pixel di test
- Se la differenza tra questi due angoli diventa maggiore di D * 2, crea punti sul poligono per questi due punti minimo e massimo
- Imposta il pixel attivo su qualsiasi valore di min / max al secondo (ovvero il più estremo in senso orario)
- D'ora in poi, scorrere l'immagine e aggiungere un altro vertice quando | (angolo del segmento di linea precedente) - (angolo tra pixel attivo / test) | > D. Il pixel attivo diventa il vertice aggiunto più recentemente.
Questo non produce un poligono ottimale, ma funziona. È il meglio che potessi pensare, comunque. Se rasterizzi il risultato, produrrebbe qualcosa di simile all'immagine originale. Potrebbe essere potenzialmente migliorato impostando una distanza minima tra i vertici.
Tuttavia, in che modo un algoritmo come questo può essere esteso a 3D , dove l'"immagine" rasterizzata è 3D / ha un volume e stiamo producendo un poliedro? Sono in perdita su come capire questo.
Grazie in anticipo per l'aiuto.