7.5.3.4        Poligoni



I poligoni sono utili per creare quadrati, rettangoli e tutte i poligoni piani con un numero di angoli superiore a tre. La sintassi è :

polygon {
NUMERO_TOTALE_DI_PUNTI,
<A_1>, <A_2>, ..., <A_na>, <A_1>,
<B_1>, <B_2>, ..., <B_nb>, <B_1>,
<C_1>, <C_2>, ..., <C_nc>, <C_1>,
...
}

I punti da <A_1> ad <A_na> descrivono il primo 'sotto - poligono', i punti da <B_1> a <B-nb> descrivono il secondo e così via. Un poligono può contenere un qualunque numero di sotto - poligoni, sovrapposti o no. Nelle zone dove si sovrappone un numero pari di poligoni, l'oggetto appare 'bucato'. Tutto ciò di cui ci si deve assicurare è che tutti questi poligoni siano chiusi, ripetendo il primo punto di ogni sotto - poligono alla fine della sequenza di punti che lo definisce. Ciò implica che tutti i punti di un sotto - poligono devono essere diversi.
Se l'ultimo sotto - poligono non è chiuso, viene visualizzato un messaggio di avvertimento e POV-Ray lo chiude automaticamente. Ciò è utile in quanto i poligoni importati da un altro programma possono non essere chiusi, cioè il loro primo ed ultimo punto possono non essere uguali.
Tutti i punti di un poligono sono descritti di vettori a tre dimensioni che ne indicano la posizione e che devono giacere su un piano. Se ciò non accade, viene visualizzato un programma di errore e POV-Ray si ferma. Se vengono usati vettori a due dimensioni, POV-Ray assume che la terza coordinata sia uguale a zero.

Un poligono quadrato che si adatta perfettamente alla mappa di immagine quadrata di default, è :

polygon {
4,
<0, 0>, <0, 1>, <1, 1>, <1, 0>
texture {
finish { ambient 1 diffuse 0 }
pigment { image_map { gif "prova.gif" } }
}
//scalare e ruotare come serve
}

La funzione 'sotto - poligono' può essere usata per creare oggetti complessi come la lettera 'P', dove si crea un foro in un altro poligono :

#declare P = polygon {
12,
<0, 0>, <0, 6>, <4, 6>, <4, 3>, <1, 3>, <1, 0>, <0, 0>,
<1, 4>, <1, 5>, <3, 5>, <3, 4>, <1, 4>
}

Il primo 'sotto - poligono' (prima riga) descrive la sagoma esterna della lettera. Il secondo 'sotto - poligono' (seconda riga) descrive il foro rettangolare che viene praticato nella parte superiore della lettera 'P'. Entrambi i poligoni sono chiusi, cioè, i punti iniziali e finali sono gli stessi.

La possibilità di creare dei fori all'interno di un poligono è data dai test di intersezione interno - esterno che POV-Ray effettua. Un punto si considera essere all'interno di un poligono se una linea retta tracciata da questo punto in una direzione arbitraria attraversa un contorno un numero dispari di volte (questo è conosciuto come Teorema delle Curve di Jordan).

Un altro esempio molto complesso, che mostra un grande triangolo con tre piccoli fori e tre triangolini separati, è dato sotto :

polygon {
28,
<0, 0> <1, 0> <0, 1> <0, 0> // triangolo grande esterno
<.3, .7> <.4, .7> <.3, .8> <.3, .7> // triangolino esterno#1
<.5, .5> <.6, .5> <.5, .6> <.5, .5> // triangolino esterno#2
<.7, .3> <.8, .3> <.7, .4> <.7, .3> // triangolino esterno #3
<.5, .2> <.6, .2> <.5, .3> <.5, .2> // triangolo interno#1
<.2, .5> <.3, .5> <.2, .6> <.2, .5> // triangolo interno #2
<.1, .1> <.2, .1> <.1, .2> <.1, .1> // triangolo interno#3
}