4.4.4.1 Capire
il Concetto di Spline
Sarebbe utile, per capire le spline,
avere una specie di 'Laboratorio Splines' dove potersi esercitare manipolando
tipi di splines e punti per vedere come si comportano. Allora facciamocene
uno ! Ora che sappiamo come creare un oggetto lathe elementare, sarà
facile. (lathdem2.pov) :
#include "colors.inc"
camera {
orthographic
up <0, 5, 0>
right <5, 0, 0>
location <2.5, 2.5, -100>
look_at <2.5, 2.5, 0>
}
/* impostiamo i punti di controllo da usare */
#declare Red_Point = <1.00, 0.00, 0>
#declare Orange_Point = <1.75, 1.00, 0>
#declare Yellow_Point = <2.50, 2.00, 0>
#declare Green_Point = <2.00, 3.00, 0>
#declare Blue_Point = <1.50, 4.00, 0>
/* rendiamo i punti di controllo visibili */
cylinder { Red_Point, Red_Point - 20*z, .1
pigment { Red }
finish { ambient 1 }
}
cylinder { Orange_Point, Orange_Point - 20*z, .1
pigment { Orange }
finish { ambient 1 }
}
cylinder { Yellow_Point, Yellow_Point - 20*z, .1
pigment { Yellow }
finish { ambient 1 }
}
cylinder { Green_Point, Green_Point - 20*z, .1
pigment { Green }
finish { ambient 1 }
}
cylinder { Blue_Point, Blue_Point- 20*z, .1
pigment { Blue }
finish { ambient 1 }
}
/* qualcosa per fare vedere la spline */
lathe {
linear_spline
5,
Red_Point,
Orange_Point,
Yellow_Point,
Green_Point,
Blue_Point
pigment { White }
finish { ambient 1 }
}
Ora, respiriamo profondamente.
![]() |
Fig. 23-Punti uniti con spline piana
Sappiamo che questa 'cosa' ha un aspetto
un po' incomprensibile ma, con qualche semplice spiegazione, possiamo vedere
facilmente come si comporta. Per prima cosa, stiamo usando una macchina
fotografica di tipo 'ortografico'. Se non abbiamo ancora letto nulla su
essa (§ 7.4.1), ecco un breve riassunto :
rende la scena piatta, eliminando gli effetti di distorsione prospettica,
in modo che per esempio in una vista laterale, gli oggetti sembrano disegnati
su carta millimetrata (come nella vista laterale di un modellatore o di
un programma CAD). Ci sono diversi utilizzi per questo nuovo tipo di macchina
fotografica, ma per ora ci permette di vedere il nostro oggetto ed i cilindri
'all'insù', in modo che ciò che vediamo è quasi più
una sezione trasversale dell'oggetto, che non l'oggetto stesso. Per aumentare
quest'effetto, eliminiamo le ombreggiature con un finish{
ambient 1} che elimina ovviamente anche
il bisogno di illuminazione. Inoltre, abbiamo posizionato questa 'macchina'
in modo che il punto <0,0> appaia all'estremità inferiore
destra della nostra scena.
Poi, abbiamo dichiarato un insieme di punti. Notiamo che abbiamo usato
punti a tre coordinate invece che a due come avevamo detto prima. Questa
è l'eccezione di cui parlavamo. Quando dichiariamo un punto a tre
coordinate e poi lo usiamo in un oggetto lathe,
l'oggetto utilizza solo le prime due coordinate del vettore e ignora qualunque
cosa sia la terza coordinata. In questo caso è comodo perchè
rende possibile fare questo esempio.
Poi facciamo due cose diverse con questi punti. Primo, li usiamo per piazzare
dei cilindri di piccolo diametro nelle posizioni dei punti con le facce
rotonde di fronte alla macchina fotografica. Poi, li riutilizziamo per
determinare il 'lathe'. Dato che dichiarare un vettore a due componenti
può dare qualche strano risultato e inoltre non è ciò
di cui abbiamo bisogno per fare dei cilindri, possiamo trarre vantaggio
dalla tendenza dell'oggetto 'lathe' a ignorare la terza coordinata e la
impostiamo a zero.
Il risultato finale è : renderizzando questo oggetto, vediamo
un oggetto 'lathe' bianco contro uno sfondo nero, che ci mostra l'aspetto
della curva che abbiamo usato e le estremità circolari dei cilindri
ci mostrano dove sono i nostri punti di controllo sul piano x-y. Abbiamo
usato una spline lineare, così che otteniamo una linea spezzata
a zigzag tra i punti. Cambiamo i punti di controllo rosso e blu come segue
(lathdem3.pov).
#declare Red_Point = <2.00, 0.00, 0>
#declare Blue_Point = <0.00, 4.00, 0>
![]() |
Fig. 24
Renderizziamo e come possiamo vedere, tutto
quello che succede è che i segmenti si spostano in modo da conformarsi
alle nuove posizioni dei punti rosso e blu. Le spline lineari sono talmente
semplici che potremmo manipolarle dormendo, no ?
Proviamo qualcosa di differente. Per prima cosa, cambiamo i punti di controllo
in questo modo (lathdem4.pov).
#declare Red_Point = <1.00, 0.00, 0>
#declare Orange_Point = <2.00, 1.00, 0>
#declare Yellow_Point = <3.50, 2.00, 0>
#declare Green_Point = <2.00, 3.00, 0>
#declare Blue_Point = <1.50, 4.00, 0>
![]() |
Fig. 25-Altri punti
Poi torniamo alla parte lathe e cambiamo linear_spline in quadratic_spline.
![]() |
Fig. 26-Punti uniti da una spline quadratica
Renderizziamo e otteniamo un paio di cose
degne di nota. Per prima cosa, vediamo che, invece di una linea spezzata,
abbiamo archi smussati che uniscono i punti. Questi archi sono ottenuti
da curve quadratiche ed ora il nostro oggetto ha un aspetto molto più
interessante. Inoltre, il punto rosso non fa più parte della curva.
Cosa è successo ?
Bene, mentre bastano due punti per definire una linea retta, ce ne vogliono
tre per determinare una curva quadratica. POV-Ray non guarda solo ai due
punti da unire, ma anche al punto immediatamente precedente per determinare
la formula della curva quadratica da usare per congiungerli. Il problema
si trova all'inizio della curva. Oltre il primo punto, non ce ne sono altri.
Allora, dobbiamo dichiararne uno. Quindi, quando usiamo una spline quadratica,
dobbiamo ricordare che il primo punto che specifichiamo è lì
solo per permettere a POV-Ray di determinare con quale curva connettere
i primi due punti e non farà parte della curva vera e propria.
C'è solo un'altra cosa riguardo al nostro esempio. Nonostante la
nostra spline sia assemblata con linee curve e smussate, la transizione
tra queste linee è...un po' grossolana, no ? Questa curva appare
come se le linee tra i singoli punti siano state terribilmente sbagliate.
A seconda di quello che vogliamo fare, può andarci bene, oppure
possiamo avere bisogno di una forma più smussata. Fortunatamente,
se ci troviamo di fronte alla seconda ipotesi, abbiamo un'altra possibilità.
La spline quadratica richiede più tempo per il rendering di quella
lineare. Una spline cubica ne richiede ancora di più, ma se vogliamo
un oggetto veramente smussato, è l'unico modo che abbiamo. Torniamo
al nostro esempio e cambiamo quadratic_spline
in cubic_spline
(vedi lathdem5.pov). Renderizziamo un'altra volta e vediamo cosa
succede.
![]() |
Fig. 27-Punti uniti da una spline cubica
Mentre una spline quadratica ha bisogno
di tre punti per determinare la curva, per una spline cubica ne occorrono
quattro. Così, come potevamo aspettarci, il punto blu è finito
fuori dalla curva, come era successo prima per il punto rosso e il primo
e l'ultimo punto ora sono solo punti di controllo per sagomare le curve
tra i restanti punti. Ma adesso, la transizione tra il punto arancione,
quello giallo e quello verde è una curva uniforme.
Il concetto di spline è necessario ed utile e lo rivedremo per prismi
e poligoni. Con un po' di pratica, possiamo abituarci rapidamente ad usarlo.
![]() |
![]() |
![]() |