7.5.2.11        Superfici di Rotazione



Le superfici di rotazione (SOR, ovvero surface of revolution) sono generate ruotando una curva attorno all'asse delle y. La curva è composta di punti che descrivono la dipendenza del raggio dall'altezza sull'asse di rotazione. La sintassi dell'oggetto SOR è :

sor {
NUMERO_DI_PUNTI,
<PUNTO0>, <PUNTO1>, ..., <PUNTOn-1>
[ open ]
[ sturm ]
}

I punti da <PUNTO0> a <PUNTOn-1> sono vettori a due dimensioni composti dal raggio e dall'altezza corrispondente, cioè la posizione sull'asse di rotazione. Questi punti sono collegati insieme da una curva e ruotati attorno all'asse delle y, a formare l'oggetto SOR. Il primo e l'ultimo punto sono utilizzati come punti di controllo della curva. La funzione utilizzata per calcolare la curva che congiunge i punti è simile alla funzione spline utilizzata per gli oggetti lathe. La differenza è che gli oggetti SOR sono meno flessibili, poiché devono sottostare alle leggi che regolano tutte le funzioni matematiche e cioè che ad ogni punto dell'asse y deve corrispondere al massimo un punto della funzione, cioè un valore di raggio. Non si possono usare curve chiuse per un oggetto SOR.

La parola chiave
open ti permette di rimuovere le chiusure alle estremità dell'oggetto. Se viene utilizzata, non si dovrebbe usare l'oggetto SOR in oggetti CSG, poiché potrebbe dare risultati errati.

L'oggetto SOR è utile per creare bottiglie, vasi ed oggetti simili. Un semplice vaso potrebbe essere :

#declare Vaso = sor {
7,
<0.000000, 0.000000>
<0.118143, 0.000000>
<0.620253, 0.540084>
<0.210970, 0.827004>
<0.194093, 0.962025>
<0.286920, 1.000000>
<0.468354, 1.033755>
open
}

Ci si potrebbe chiedere perché ci sia bisogno di un oggetto SOR quando si ha già a disposizione un oggetto 'lathe', molto più flessibile. Il motivo è molto semplice. I test di intersezione con un oggetto SOR richiedono di risolvere un'equazione di terzo grado, mentre un oggetto lathe richiede la risoluzione di un'equazione di sesto (e si ha bisogno di una spline cubica per ottenere la stessa gradualità nella curva). Dato che la maggior parte degli oggetti SOR e lathe sono costituiti da parecchi punti, ciò comporterà una grossa differenza nel tempo di rendering. Inoltre, le soluzioni dell'equazione di terzo grado sono più accurate.
Se l'oggetto non viene calcolato correttamente, si può utilizzare il metodo di Sturm, più lento, ma più accurato.

Le seguenti spiegazioni sono per il lettore interessato all'aspetto matematico dell'oggetto SOR. Sebbene non sia necessario leggerle, possono essere d'aiuto per capire come esso viene calcolato.

La funzione che viene ruotata attorno all'asse delle y per ottenere l'oggetto SOR è :

r^2 = f(h) = A*h^3 + B*h^2 + C*h + D

Dove r è il raggio e h è l'altezza. Dato che questa è una funzione cubica in h, è sufficientemente versatile e permette di ottenere curve regolari.

La curva stessa è definita da un insieme di n punti P(i), con i che varia tra 0 ed n-1, che vengono interpolati utilizzando una funzione per ogni segmento della curva. Un segmento j con j che varia tra 1 ed n-3 va dal punto P(j) al P(j+1) ed utilizza i punti P(j-1) e P(j+2) per determinare la pendenza della curva alle estremità. Se ci sono n punti, otterremo n-3 segmenti. Ciò significa che sono necessari almeno quattro punti per ottenere una curva. I coefficienti A(j), B(j), C(j), D(j) sono calcolati per ogni segmento per mezzo delle equazioni :





dove r(j) è il raggio ed h(j) è l'altezza del punto P(j).
La figura sotto mostra la configurazione dei punti P(i), la posizione del segmento j, e la curva definita da questo segmento.

Fig. 204 - J-esimo segmento di un gruppo di n-3 segmenti in una configurazione composta da n punti. Il punto descrive la curva di una superficie dii rotazione.