You are on page 1of 9

Introduzione alle curve di Bezier

Le curve di Bezier orono la possibilit`a di disegnare curve nello spazio ane reale ove si imponga il
passaggio per punti dati, con vettori tangenti dati. Le funzioni che parametrizzano
le coordinate dei punti della curva sono funzioni polinomiali di un parametro t in
[0, 1], e la costruzione fa dipendere la curva dalla scelta un numero nito di punti (il
cosiddetto poligono di controllo). Il procedimento si comporta bene per trasformazioni
ani, ovvero per applicare una trasformazione ane ai punti di una curva di Bezier
`e suciente applicare la trasformazione ai punti del poligono di controllo e costruire
la curva corrispondente al poligono trasformato. Prima di entrare nei dettagli della
Pierre Bezier (1910-1999)
costruzione generale, facciamo qualche considerazione sulle curve di Bezier di grado
basso.
Dati due punti P
0
e P
1
dello spazio ane, la curva di Bezier determinata da questi due punti `e
linterpolazione lineare del segmento che li congiunge, ovvero

P
0
P
1
(t) = (1 t)P
0
+tP
1
per t [0, 1].
Il segmento si riduce ad un unico punto se P
0
= P
1
. Se i due punti sono distinti, il vettore
P0
P1
Pt
tangente alla curva (in tutti i punti) `e P
1
P
0
e quindi il segmento `e percorso a velocit`a costante.
Dati tre punti P
0
, P
1
e P
2
dello spazio ane, possiamo iterare linterpolazione lineare e, per ogni t [0, 1],
considerare i due punti Q
0
= (1 t)P
0
+ tP
1
e Q
1
= (1 t)P
1
+ tP
2
e fare linterpolazione
lineare di questi, ovvero P
t
= (1 t)Q
0
+ tQ
1
. I punti P
t
cos` costruiti formano la curva di
Bezier determinata dai tre punti, P
0
, P
1
, P
2
, ovvero

P
0
P
1
P
2
(t) = (1 t)
2
P
0
+ 2t(1 t)P
1
+t
2
P
2
per t [0, 1].
Se i tre punti sono allineati, si ottiene ancora un segmento, anche se non pi` u percorso a velocit`a
P
0
P
1
P
2
P
t
costante (farsi i conti!). Il vettore tangente alla curva `e v
t
= 2(1 t)(P
1
P
0
) 2t(P
2
P
1
).
Gli estremi nali di questi vettori (applicati nellorigine) percorrono i punti del segmento che
congiunge gli estremi di 2(P
1
P
0
) e 2(P
2
P
1
). In particolare, la curva parte (t = 0) dal
punto P
0
con vettore tangente 2(P
1
P
0
) ed arriva (t = 1) al punto P
1
con vettore tangente 2(P
2
P
1
).
In particolare, la curva passa per il punto M =
1
4
P
0
+
1
2
P
1
+
1
4
P
2
, ovvero il punto medio della mediana del
triangolo P
0
P
1
P
2
uscente dal vertice P
1
.
Esercizio 1. Dimostrare che quando i tre punti, P
0
, P
1
, P
2
, non sono allineati, la curva di Bezier
P
0
P
1
P
2
(t) `e un arco della
parabola passante per M =
1
4
P
0
+
1
2
P
1
+
1
4
P
2
e bitangente in P
0
e P
2
ai lati P
0
P
1
e P
1
P
2
del triangolo P
0
P
1
P
2
e inoltre, che
la direzione dellasse della parabola `e parallela alla retta che congiunge P
1
con M.
Svolgimento. Non `e dicile mostrare la tesi osservando che, nel sistema di riferimento che ha lorigine nel punto M =
1
4
P
0
+
1
2
P
1
+
1
4
P
2
e per vettori di base
1
2
(P
0
P
2
) e M P
1
, i punti della curva si scrivono come
P
t
= M + (2t 1)
P
0
P
2
2
+ (2t 1)
2
(M P
1
).
Lasciamo i calcoli al lettore e proponiamo una dimostrazione che fa uso di qualche argomento di Geometria Proiettiva.
Supponiamo il piano ane immerso nel piano proiettivo e osserviamo che la curva `e una conica appartenente al fascio
bitangente in P
0
e P
2
alle retta P
0
P
1
e P
1
P
2
. Precisamente `e lunica conica del fascio che passa per M. Per tutte le coniche
del fascio, P
1
`e il polo della retta P
0
P
2
e quindi il secondo punto di intersezione (dopo M) della conica con la retta P
1
M
`e il quarto armonico dopo P
1
, K, M, ove K =
P
0
+P
2
2
= (P
1
M) (P
0
P
2
). Poiche M `e il punto medio del segmento P
1
K, il
quarto armonico `e il punto improprio, P

della retta P
1
M. La tangente alla conica in quel punto deve passare per il polo
della retta P
1
M, che appartiene alla retta P
0
P
2
ed `e il quarto armonico dopo P
0
, P
2
, K (intersezione tra la polare di K e la
polare di M). Essendo K il punto medio del segmento P
0
P
2
, il quarto armonico `e il punto improprio, Q

, della retta P
0
P
2
e la tangente in P

`e quindi la retta impropria (perche contiene due punti impropri distinti).


In modo analogo si deniscono le curve di Bezier di grado 3, iterando una volta in pi` u il procedimento di
interpolazione lineare.
P
0
P
1
P
2
P
3
P
t
P
0
P
1
P
2
P
3
P
0
P
1
P
2
P
3
P
0
P
1
P
2
P
3
Qui sopra alcuni esempi di curve di Bezier di grado 3, che fanno intuire come possa modicarsi la curva al
variare del poligono di controllo.
Possiamo quindi dare una denizione generale delle curve di Bezier.
1
Denizione. Dati n + 1 punti, P
0
, . . . , P
n
, dello spazio ane, la curva di Bezier di ordine n determinata
dai punti dati `e la curva

P
0
P
n
(t) =
n

j=0
B
n
j
(t)P
j
per t [0, 1]
ove i coecienti B
n
j
sono i polinomi di Bernstein di grado n, ovvero B
n
j
(t) =
_
n
j
_
t
j
(1t)
nj
, per j = 0, . . . , n.
Fissato un intero non negativo n, abbiamo denito qui sopra i polinomi di Bernstein B
n
j
(t) per j =
0, . . . , n. Come per i coecienti binomiali, si pu`o estendere la denizione dei polinomi
di Bernstein per ogni coppia di interi, ponendo B
n
j
(t) identicamente uguale a 0 se j <
0 o j > n. Qui a anco abbiamo riportato il graco dei polinomi di Bernstein per n =
1, . . . , 4. Alcune delle propriet`a delle curve di Bezier sono legate proprio alle propriet`a
dei polinomi di Bernstein e del loro ottenersi da uniterazione dellinterpolazione
lineare. Andremo quindi a raccogliere in una osservazione le principali propriet`a
di questi polinomi e poi ad applicare queste propriet`a alla realizzazione di curve
di Bezier. Le propriet`a di queste curve dipendono quindi dalla scelta del poligono
di controllo e dalle propriet`a dei coecienti e uno degli scopi della loro costruzione `e il disegno di curve
che soddisno a particolari condizioni geometriche (di passaggio o di tangenza o altro) in alcuni punti e la
possibilit`a di manipolare facilmente queste costruzioni, ovvero applicare facilmente trasformazioni ani e
proiezioni.
Proposizione. Fissato un intero n 0, siano B
n
j
(t) i polinomi di Bernstein di grado n. Valgono le seguenti
propriet`a.
(a) (positivit` a) B
n
j
(t) 0 per ogni t [0, 1].
(b) (simmetria) B
n
nj
(t) = B
n
j
(1 t), per ogni j = 0, . . . , n e per ogni t [0, 1].
(c) (partizione dellunit`a)
n

j=0
B
n
j
(t) = 1 per ogni t [0, 1].
(d) (costruzione ricorsiva) B
n
j
(t) = (1 t)B
n1
j
(t) +tB
n1
j1
(t), per ogni j = 0, . . . , n, per ogni t [0, 1] e per
n 1.
(e)
d B
n
j
(t)
dt
= n(B
n1
j1
(t) B
n1
j
(t)).
(f) Fissati j ed n e presi comunque e t in [0, 1], si ha B
n
j
(t) =
n

k=j
B
n
k
()B
k
j
(t).
dim. (a) e (b) sono una conseguenza immediata delle denizioni e della simmetria dei coecienti binomiali.
(c) discende dalla constatazione che
n

j=0
B
n
j
(t) =
n

j=0
_
n
j
_
t
j
(1 t)
nj
= (t + 1 t)
n
= 1
per la formula del binomio di Newton. Analogamente (d) `e conseguenza della denizione ricorsiva del
coeciente binomiale, ovvero
(1 t)B
n1
j
(t) +tB
n1
j1
(t) =
__
n 1
j
_
+
_
n 1
j 1
__
t
j
(1 t)
nj
.
(e) Con un calcolo elementare si ha
d B
n
j
(t)
dt
= j
_
n
j
_
t
j1
(1 t)
nj
(n j)
_
n
j
_
t
j
(1 t)
nj1
.
Inoltre, si ha
j
_
n
j
_
= j
n!
j!(n j)!
= n
(n 1)!
(j 1)!(n j)!
= n
_
n 1
j 1
_
,
(n j)
_
n
j
_
= (n j)
n!
j!(n j)!
= n
(n 1)!
j!(n j 1)!
= n
_
n 1
j
_
.
da cui si conclude.
2
(f ) Si ha
n

k=j
B
n
k
()B
k
j
(t) =
n

k=j
_
k
j
_
_
n
k
_

k
(1 )
nk
t
j
(1 t)
kj
.
Inoltre,
_
k
j
_
_
n
k
_
=
n!
j!(k j)!(n k)!
=
_
n
j
__
n j
k j
_
.
Quindi la somma scritta sopra si pu`o anche scrivere come
_
n
j
_

j
t
j
n

k=j
_
n j
k j
_
(1 )
nk

kj
(1 t)
kj
e ponendo h = k j, si scrive
_
n
j
_
(t)
j
nj

h=0
_
n j
h
_
(1 )
njh

h
(1 t)
h
=
_
n
j
_
(t)
j
( t + 1 )
nj
= B
n
j
(t).
Osserviamo da ultimo che, in base alle denizioni date, si poteva far partire lindice di somma k da 0 invece
che da j, essendo B
k
j
(t) = 0 se k < j.
Esercizio 2. Nello spazio ane A(R
k
) sia data una curva (t) =
t
(f
1
(t), . . . , f
k
(t)), ove f
1
(t), . . . , f
k
(t) sono polinomi in R[t] di
grado minore o uguale ad n. Si mostri che esistono n+1 punti P
0
, . . . , P
n
di A(R
k
) tali che (t) =
P
0
...P
n
(t) per ogni t [0, 1].
Si determinino esplicitamente tali punti nel caso della curva piana (t) =
_
13t+t
3
2tt
2
_
.
Dalle propriet`a dei polinomi di Bernstein possiamo dedurre le prime conseguenze per le curve di Bezier.
Proposizione. Siano dati i punti P
0
, . . . , P
n
dello spazio ane, A, e sia
P
0
...P
n
(t) =

n
j=0
B
n
j
(t)P
j
, per
t [0, 1], la curva di Bezier individuata da tali punti.
(a) La curva `e contenuta nellinviluppo convesso dei punti P
0
, . . . , P
n
.
(b) Si ha
P
0
...P
n
(0) = P
0
e
P
0
...P
n
(1) = P
n
e inoltre, i vettori tangenti in tali punti sono

P
0
...P
n
(0) =
n(P
1
P
0
) e

P
0
...P
n
(1) = n(P
n
P
n1
).
(c) Invertendo lordine dei punti di controllo, si ha
P
n
...P
0
(t)) =
P
0
...P
n
(1 t) per ogni t [0, 1].
(d) Sia f : A A una trasformazione ane. Allora f(
P
0
...P
n
(t)) =
f(P
0
)...f(P
n
)
(t) per ogni t [0, 1].
dim. (a) Linviluppo convesso dei punti P
0
, . . . , P
n
`e linsieme
K =
_
n

i=0
c
j
P
j
| c
j
[0, 1], c
0
+ +c
n
= 1
_
.
Quindi laermazione `e una conseguenza del fatto che B
n
j
(t) 0 e
n

j=0
B
n
j
(t) = 1 per ogni t [0, 1], come
visto nella Proposizione precedente.
(b) Se 0 < j n, tutti i polinomi di Bernstein B
n
j
(t) sono divisibili per t e quindi si annullano quando t = 0;
da cui si ottiene che
P
0
...P
n
(0) = P
0
. Analogamente, se 0 j < n, tutti i polinomi di Bernstein B
n
j
(t) sono
divisibili per 1 t e quindi si annullano quando t = 1; da cui si ottiene che
P
0
...P
n
(1) = P
n
. Per quanto
visto nel punto (e) della Proposizione precedente, in ogni punto t [0, 1] il vettore tangente alla curva `e

P
0
...P
n
(t) =
n

j=0
dB
n
j
(t)
dt
P
j
= n
n

j=0
(B
n1
j1
(t) B
n1
j
(t))P
j
=
= n
_
_
n

j=0
B
n1
j1
(t)P
j

n

j=0
B
n1
j
(t)P
j
_
_
= n
n1

j=0
B
n1
j
(t)(P
j+1
P
j
).
Calcolato per t = 0 e t = 1 fornisce il risultato cercato.
(c)
`
E conseguenza della simmetria dei polinomi di Bernstein.
(d) Il punto
P
0
...P
n
(t) `e una combinazione baricentrica dei punti P
0
, . . . , P
n
, quindi laermazione discende
dal fatto che le trasformazioni ani conservano le combinazioni baricentriche.
3
Deformazioni di curve di Bezier
La costruzione delle curve di Bezier, oltre a fornire facilmente delle curve lisce passanti per punti dati ed aventi direzioni
di tangenza ssate in tali punti con curve di grado basso e facilmente disegnabili, permette anche di deformare facilmente tra
loro due curve dello stesso ordine, interpolando linearmente i poligoni di controllo. Nel disegno qui sotto sono riportate alcune
deformazioni di curve di Bezier di ordine 3, mostrando in grigio i poligoni di controllo. Il cambiamento di colore dal rosso al
blu indica le tappe della deformazione tra le due curve.
Ci si pu`o chiedere come operare se si vogliono deformare due curve di Bezier con poligoni di controllo che abbiano numerosit`a
diverse. La cosa `e possibile, perche si possono aumentare i punti nel poligono di controllo di una curva di Bezier senza modicare
la curva. Precisamente vale la seguente
Osservazione. Siano dati i punti P
0
, . . . , P
n
dello spazio ane e si ponga P
1
= O = P
n+1
, ove O `e una ssata origine. Siano
inoltre, Q
0
, . . . , Q
n+1
i punti deniti ponendo Q
i
= (1
i
n+1
)P
i
+
i
n+1
P
i1
, per i = 0, . . . , n + 1. Allora, per ogni t [0, 1], si
ha

P
0
...P
n
(t) =
Q
0
...Q
n+1
(t).
dim. Si tratta di nuovo di scrivere ordinatamente i termini delle somme.

Q
0
...Q
n+1
(t) =
n+1

i=0
B
n+1
i
(t)Q
i
=
n+1

i=0
_
n+1
i
_
t
i
(1 t)
n+1i
_
(1
i
n+1
)P
i
+
i
n+1
P
i1

=
n

i=0
(1
i
n+1
)
_
n+1
i
_
t
i
(1 t)
n+1i
P
i
+
n+1

i=1
i
n+1
_
n+1
i
_
t
i
(1 t)
n+1i
P
i1
= (1 t)
n

i=0
n+1i
n+1
_
n+1
i
_
t
i
(1 t)
ni
P
i
+ t
n

j=0
j+1
n+1
_
n+1
j+1
_
t
j
(1 t)
nj
P
j
.
Ora basta osservare che
n + 1 i
n + 1
_
n + 1
i
_
=
n + 1 i
n + 1
(n + 1)!
i!(n + 1 i)!
=
_
n
i
_
e
j + 1
n + 1
_
n + 1
j + 1
_
=
j + 1
n + 1
(n + 1)!
(j + 1)!(n j)!
=
_
n
j
_
per concludere che
Q
0
...Q
n+1
(t) = (1 t)
P
0
...P
n
(t) + t
P
0
...P
n
(t) =
P
0
...P
n
(t) per ogni valore di t [0, 1].
Vediamo unapplicazione di questo metodo di deformazione nella macro interpath proposta da Knuth a p. 134 del manuale
di Metafont, di cui mostriamo due esempi nei disegni qui a anco
che sono stati rifatti seguendo le indicazioni del testo. Come `e
noto, Metafont (e quindi Metapost) costruisce i cammini (path)
unendo tratti di curve di Bezier di terzo grado. Lutente `e libero
di ssare i punti di passaggio della curva, (ed eventualmente la
pendenza della tangente entrante o uscente da tali punti), e un
algoritmo determina i punti di controllo posti prima e dopo del
punto ssato. Come si vede nella macro pi` u sotto, per deformare
le due curve vengono interpolati linearmente i punti del poligono di controllo di ciascun tratto di curva. Riportiamo qui sotto il
codice Metapost con la macro interpath, ricordando che la scrittura a[m,n] per un valore numerico a e due punti (pair) m,n,
rappresenta linterpolazione lineare (1-a)m + an. Dovrebbe quindi essere chiaro dal contesto che nella denizione sottostante
lespressione a rappresenta una variabile numerica, mentre p e q rappresentano due path.
vardef interpath(expr a,p,q) =
for t=0 upto length p -1:
a[point t of p, point t of q]..controls a[postcontrol t of p, postcontrol t of q]
and a[precontrol t+1 of p, precontrol t+1 of q] ..endfor
if cycle p: cycle
else: a[point infinity of p, point infinity of q] fi
enddef;
4
Algoritmo di de Casteljau
Ora vogliamo usare le ulteriori propriet`a dei polinomi di Bernstein per descrivere un celebre algoritmo,
che si riveler`a utile per disegnare la curva.
Denizione. Siano dati i punti P
0
, . . . , P
n
di uno spazio ane A e sia ssato t
0
[0, 1]. Al variare di
k = 0, . . . , n si deniscono i punti P
k
j
per j = 0, . . . , n k, ponendo
P
0
j
= P
j
, per j = 0, . . . , n e P
k
j
= (1 t
0
)P
k1
j
+t
0
P
k1
j+1
, per j = 0, . . . , n k.
Spesso i punti cos` deniti si scrivono ordinatamente nella forma:
P
0
0
P
0
1
. . . P
0
n
P
1
0
P
1
n1
.
.
.
.
.
.
P
n
0
La costruzione di questa sequenza di punti `e il nucleo centrale dellAlgorit-
P
0
0
= P
0
P
0
1
= P
1
P
0
2
= P
2
P
0
3
= P
3
P
1
0
P
1
1
P
1
2
P
2
0
P
2
1
P
3
0
mo di Casteljau che aerma che con questa iterazione dellinterpolazione li-
neare si costruiscono punti della curva di Bezier relativa a P
0
, . . . , P
n
e che
si pu`o suddividere la curva nellunione delle due curve di Bezer relative ai punti P
0
0
, . . . , P
n
0
e P
n
0
, P
n1
1
, . . . , P
0
n
,
come `e indicativamente rappresentato nella gura a anco. Pi` u precisamente, andiamo a dimostrare la
seguente
Proposizione. [Algoritmo di De Casteljau] Siano dati i punti P
0
, . . . , P
n
dello spazio ane e ssato t
0

[0, 1]. Il punto nale, P
n
0
, della sequenza denita sopra `e il punto
P
0
...P
n
(t
0
) della curva di Bezier determinata
dai punti P
0
, . . . , P
n
. Inoltre, la restrizione della curva
P
0
...P
n
allintervallo [0, t
0
] coincide con la curva

P
0
0
...P
n
0
, mentre la restrizione allintervallo [t
0
, 1] coincide con
P
n
0
P
n1
1
...P
0
n
.
Cominciamo con un Lemma
Lemma. Siano dati i punti P
0
, . . . , P
n
e sia ssato t
0
[0, 1]. Indichiamo con P
k
j
, per 0 j n k e
0 k n i punti deniti sopra. Allora, si ha P
k
j
=

k
i=0
B
k
i
(t
0
)P
j+i
.
dim. Facciamo induzione su k, osservando che per k = 0 o k = 1 si tratta proprio della denizione scritta
sopra. Supponiamo quindi che la tesi sia vera per un certo indice k e andiamo a dedurla per k + 1. Infatti,
ssato j n k 1, dalla denizione sopra, applicando lipotesi induttiva, si ottiene
P
k+1
j
= (1t
0
)P
k
j
+t
0
P
k
j+1
= (1t
0
)
k

i=0
B
k
i
(t
0
)P
j+i
+t
0
k

i=0
B
k
i
(t
0
)P
j+1+i
=
k+1

i=0
[(1t
0
)B
k
i
(t
0
)+t
0
B
k
i1
(t
0
)]P
j+i
che `e quanto serve per concludere grazie alla costruzione ricorsiva dei polinomi di Bernstein.
Osserviamo che il Lemma precedente dice esattamente che P
n
0
=

n
i=0
B
n
i
(t
0
)P
i
=
P
0
...P
n
(t
0
) e di-
mostra cos` la prima parte della Proposizione. Andiamo quindi a dimostrare il seguente
Lemma. [algoritmo di divisione] Siano dati i punti P
0
, . . . , P
n
, sia ssato t
0
[0, 1], e indichiamo con P
k
j
,
per 0 j n k e 0 k n i punti deniti sopra. Allora, ssato comunque [0, 1], si ha

P
0
...P
n
(t
0
) =
P
0
0
...P
n
0
().
dim. Si ha

P
0
0
...P
n
0
() =
n

k=0
B
n
k
()P
k
0
=
n

k=0
B
n
k
()
k

j=0
B
k
j
(t
0
)P
j
=
n

j=0
_
_
n

k=j
B
n
k
()B
k
j
(t
0
)
_
_
P
j
A questo punto, basta applicare il punto (f ) della Proposizione sui polinomi di Bernstein per concludere che
lultima somma `e uguale a
P
0
...P
n
(t
0
), essendo B
n
j
(t
0
) =

n
k=j
B
n
k
()B
k
j
(t
0
).
5
Osserviamo che il Lemma precedente aerma proprio che la restrizione della curva
P
0
...P
n
al punto
dellintervallo [0, t
0
], ovvero
P
0
...P
n
(t
0
), coincide con il punto
P
0
0
...P
n
0
(). Utilizzando la simmetria delle
curve di Bezier, si ha

P
n
0
...P
0
n
() =
P
0
n
...P
n
0
(1 ) =
P
n
...P
0
((1 )(1 t
0
)) =
P
0
...P
n
(t
0
+(1 t
0
)).
Ci`o completa la dimostrazione della Proposizione.
Un esempio. LAlgoritmo descritto sopra pu`o essere usato eettivamente per disegnare una curva di Bezier. Un primo
utilizzo, pu` o essere quello di suddividere lintervallo [0, 1] in N parti, e di utilizzare la tecnica precedente per calcolare i punti

P
0
...P
n
(i/N), per i = 0, . . . , N e unire questi punti con dei segmenti rettilinei. Se la suddivisione `e abbastanza tta, locchio
non coglie la dierenza.
Vi `e un modo pi` u ranato di utilizzare lalgoritmo precedente per disegnare unapprossimazione della curva tramite una
spezzata, ssando a priori un errore da non superare nella rappresentazione. Un modo per stimare lerrore pu`o essere il seguente:
dati gli n + 1 punti, P
0
, . . . , P
n
, la curva di Bezier
P
0
...P
n
va da P
0
a P
n
ed `e contenuta nellinviluppo convesso dei punti
dati, quindi la massima distanza di un punto della curva dalla retta P
0
P
n
`e minore della massima distanza di un punto del
poligono di controllo dalla stessa retta e tale massima distanza d` a una maggiorazione dellerrore compiuto sostituendo larco di
curva con il poligono di controllo (o con il segmento P
0
P
n
, se si preferisce).
Si pu`o quindi proporre il seguente procedimento. Si ssa una tolleranza > 0 e si valuta se tutti i punti dati distano dalla
retta P
0
P
n
meno di . Se `e cos` possiamo disegnare la spezzata che ha come estremi il poligono di controllo ed abbiamo
disegnato la curva con un errore minore di . Se cos` non `e, si considera lalgoritmo di Casteljau per t
0
= 1/2, 1/4, . . . , 1/2
n
, no
a che i punti del poligono di sinistra P
0
0
, . . . , P
n
0
non hanno massima distanza da P
0
0
P
n
0
minore di . A questo punto si disegna
il poligono formato da quei punti e si sostituisce il poligono iniziale con i punti del poligono di destra, P
n
0
, P
n1
1
, . . . , P
0
n
= P
n
per ripetere la stessa procedura su questultimi. Il processo si arresta, quando si arriva a disegnare il punto P
n
.
Nelle due gure qui sotto `e stato usato lo stesso poligono di controllo. Nella gura a sinistra sono stati calcolati con
lalgoritmo di De Casteljau 600 punti della curva di Bezier che sono stati disegnati e congiunti tra loro da segmenti. Nella gura
a destra, sempre usando lalgoritmo di De Casteljau, si `e suddivisa la curva nche la massima distanza dei vertici del poligono di
controllo della suddivisione dalla retta congiungente i due estremi non fosse minore di un ssato errore (nellesempio, lerrore
`e stato ssato a 2.5 decimi di millimetro, ovvero lo spessore di una normale penna da disegno). A titolo di cronaca, riportiamo
che, per ottenere la gura a destra, sono stati necessari circa 65 cicli del loop di calcolo della curva (contro i 600 utilizzati nella
gura precedente).
n = 5 n = 5
Riportiamo di seguito il listato MetaPost che ha prodotto la seconda gura, operando secondo il procedimento descritto
sopra (Il lettore `e caldamente invitato a migliorare sia lalgoritmo utilizzato che la sua implementazione).
beginfig(5);
numeric d,n,a,u,pi,epsilon,err;
pair nn;
pair q[][];pair p[];pair s[];pair d[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%
n=5; u=2.4cm; epsilon=0.25mm;
pi:=3.141592653589; a=1/2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
path b, pol;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% algoritmo di de Casteljau per c in [0,1]
%% calcola i poligoni di controllo a sinistra, s[],
%% ed a destra, d[], del punto q[n][0].
%%
vardef dividi(expr c) =
for j=1 upto n:
for k=0 upto n-j:
q[j][k] := (1-c)*q[j-1][k] + c*q[j-1][k+1];
endfor
endfor;
for i=0 upto n: s[i]:=q[i][0]; d[i]:=q[n-i][i]; endfor
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% calcola la distanza massima (d) dei vertici del poligono,
%% s[n],...,s[0], dalla retta s[n]--s[0].
%%
vardef test =
6
nn:=unitvector(s[n]-s[0]);
nn:= nn rotated 90;
d:=abs((s[1]-s[0]) dotprod nn);
for i=2 upto n:
err:=abs((s[i]-s[0]) dotprod nn);
if d<err: d:=err; fi;
endfor;
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% fine dei preamboli %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% il poligono di controllo
%%
for i=0 upto n:
p[i] := (2*pi*i/n, sind(360*i/n))*u;
endfor;
%%
pol = p0 for i=1 upto n-1: --p[i] endfor --p[n];
draw pol withcolor red;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% inizio del calcolo della curva
%%
for k=0 upto n: q[0][k]:=p[k]; endfor;
%%%%%%%
dividi(a);
forever:
test;
if d<epsilon:
b:=s[0] for i=1 upto n-1: --s[i] endfor --s[n];
draw b;
exitif s[n]=p[n];
for k=0 upto n: q[0][k]:=d[k]; s[k]:=d[k]; endfor;
a:=1/2;
else:
a:=a/2; dividi(a);
fi;
endfor;
endfig;
Curve di Bezier razionali
Si pu`o costruire una classe pi` u ampia di curve di B`ezier facendo uso di coordinate omogenee e dello
spazio proiettivo. Facciamo qualche richiamo per essere pi` u precisi. Lo spazio ane A(R
k
) = A
k
(R) si
immerge nello spazio proiettivo P
k
(R) = P(R
k+1
) tramite la scelta di un iperpiano di P(R
k+1
) da mandare
allinnito. Lo spazio proiettivo ha le coordinate omogenee
t
(x
0
, . . . , x
k
) e la scelta usuale `e di prendere come
iperpiano improprio H : x
0
= 0, e le coordinate ani
t
(
x
1
x
0
, . . . ,
x
k
x
0
) sui punti di P(R
k+1
) H, che viene
identicato cos` con lo spazio ane A(R
k
). I punti di P(R
k+1
) si identicano con le classi di equivalenza dei
vettori non nulli di R
k+1
rispetto alla relazione v w se, e solo se, w = av per qualche a = 0.
Dati n + 1 punti P
0
, . . . , P
n
di P(R
k+1
), si ssino dei vettori v
0
, . . . v
n
di R
k+1
, tali che P
j
= v
j
per
j = 0, . . . , n, e si consideri la curva di Bezier nello spazio R
n+1
,

v
0
...v
n
(t) =
n

j=0
B
n
j
(t)v
j
per t [0, 1].
Resta denita in questo modo una curva nello spazio proiettivo P(R
k+1
) i cui punti sono i sottospazi

v
0
...v
n
(t) al variare di t. I punti di questa curva, contenuti nel complementare di H, ovvero nello spazio
ane A(R
k
), formano i punti della curva di Bezier razionale determinata dai vettori v
0
, . . . v
n
. Le coordi-
nate dei vettori v
0
. . . v
n
sono coordinate omogenee dei punti P
0
, . . . , P
n
e la coordinata zerea del vettore
v
j
`e detta il peso attribuito al punto P
j
. Un peso nullo corrisponde ad un punto improprio dello spazio
ane. Consideriamo quindi le coordinate ani dei punti della curva, ovvero se il vettore v
j
ha coordinate
t
(x
0j
, x
1j
, . . . , x
kj
), il punto
v
0
...v
n
(t) ha coordinate ani
y
i
(t) =

n
j=0
B
n
j
(t)x
ij

n
j=0
B
n
j
(t)x
0j
, per i = 1, . . . , k.
Pur con gli stessi punti del poligono di controllo nello spazio ane, la scelta di dierenti pesi permette di
ottenere curve distinte. Vediamo un esempio: I punti del piano ane reale, P
0
=
_
1
0
_
, P
1
=
_
1
1
_
, P
2
=
_
0
1
_
,
7
si possono rialzare ai vettori v
0
=
_
1
1
0
_
, v
1
=
_
1
1
1
_
, v
2
=
_
1
0
1
_
di R
3
e danno luogo alla curva di Bezier
razionale
2

j=0
B
2
j
(t)v
j
=
_
_
1
1 t
2
2t t
2
_
_
di coordinate ani
_
1 t
2
2t t
2
_
che coincide con la curva di Bezier intera nel piano x
0
= 1, ovvero larco di parabola di equazione ane
(X Y )
2
+ 2(X +Y
3
2
) = 0.
Gli stessi punti si possono rialzare ai vettori v
0
=
_
1
1
0
_
, v
1
=
_
1
1
1
_
, v
2
=
_
2
0
2
_
di R
3
e danno luogo alla
curva di Bezier razionale
2

j=0
B
2
j
(t)v
j
=
_
_
1 +t
2
1 t
2
2t
_
_
di coordinate ani
_
1t
2
1+t
2
2t
1+t
2
_
,
che, nel piano ane, determina larco di circonferenza di equazione ane X
2
+Y
2
= 1.
Disegnamo qui di anco le due curve, mostrando in blu larco di circonferenza ed in nero larco di
parabola. A anco riportiamo altri esempi di curve razionali ottenute
dagli stessi punti, con scelte diverse di pesi per il punto P
1
. Si pu`o
vedere che la scelta di peso nullo (v
1
diventa lorigine di R
3
) pro-
duce il segmento P
0
P
2
, mentre pesi negativi fanno uscire la curva
dallinviluppo convesso dei punti del poligono di controllo. In gene-
P0
P1 P2
P0
P1 P2
rale, le curve di Bezier razionali, permettono di disegnare una pi` u
ampia famiglia di curve rispetto alle sole curve di Bezier intere, ma ci`o che le rende particolarmente utili `e il
fatto che, applicare una trasformazione proiettiva ai punti di una curva di Bezier razionale li porta sui punti
della curva di Bezier razionale che si ottiene rialzando le immagini dei punti del poligono di controllo con le
immagini dei vettori corrispondenti tramite una soprastante dellapplicazione proiettiva. Pi` u precisamente,
possiamo scrivere
Proposizione. Siano P
0
, . . . , P
n
punti dello spazio proiettivo P
k
(R) e siano ssati dei vettori v
0
, . . . , v
n
tali che P
j
= v
j
per j = 0, . . . , n. Sia f : P
k
(R) P
k
(R) unapplicazione proiettiva con soprastante
: R
k+1
R
k+1
e sia
v
0
...v
n
la curva di Bezier razionale associata ai vettori dati. Allora, per ogni t [0, 1],
f(
v
0
...v
n
(t)) =
(v
0
)...(v
n
)
(t).
In coordinate omogenee, una curva di Bezier razionale non `e altro che una curva di Bezier nello spazio
ane R
k+1
e quindi valgono per queste curve le propriet`a gi`a viste nelle pagine precedenti e pu`o essere
utilizzato lalgoritmo di de Casteljau per determinare le coordinate omogenee di queste curve. Concludiamo
questa rapida disamina delle curve razionali, dando unindicazione di come varia la curva modicando la
scelta dei vettori v
j
soprastanti i punti dello spazio proiettivo (la scelta dei pesi).
Osservazione. Siano P
0
, . . . , P
n
punti dello spazio ane A
k
(R), immerso nel modo usuale nello spazio
proiettivo P
k
(R), e siano ssati dei vettori v
0
, . . . , v
n
tali che P
j
= v
j
, con v
j
=
_
x
0j
.
.
.
x
kj
_
R
k+1
, per
j = 0, . . . , n. Sia
v
0
...v
n
la curva di Bezier razionale associata ai vettori dati e P(t) il punto dello spazio
ane corrispondente a
v
0
...v
n
(t), per t [0, 1]. Sia ssato j
0
{0, . . . , n} e si ponga v

j
0
= (1 + )v
j
0
, e
v

j
= v
j
per j = j
0
. Sia
v

0
...v

n
la curva di Bezier razionale associata e P

(t) il punto dello spazio ane


corrispondente a
v

0
...v

n
(t), per t [0, 1].
Allora, per ogni t [0, 1], si ha
P

(t) = (1 )P(t) +P
j
0
, ove = (t) =
B
n
j
0
(t)x
0j
0

n
j=0
B
n
j
(t)x
0j
+B
n
j
0
(t)x
0j
0
.
dim. Le coordinate ani del punto P
j
sono y
ij
=
x
ij
x
0j
per i = 1, . . . , k; cos` come le coordinate ani di P(t)
sono y
i
(t) =

n
j=0
B
n
j
(t)x
ij

n
j=0
B
n
j
(t)x
0j
, per i = 1, . . . , k.
8
Osserviamo che
1 =

n
j=0
B
n
j
(t)x
0j

n
j=0
B
n
j
(t)x
0j
+B
n
j
0
(t)x
0j
0
.
La i-esima coordinata ane di P

(t) sar`a quindi


y

i
(t) =

n
j=0
B
n
j
(t)x
ij
+B
n
j
0
(t)x
ij
0

n
j=0
B
n
j
(t)x
0j
+B
n
j
0
(t)x
0j
0
=

n
j=0
B
n
j
(t)x
0j

n
j=0
B
n
j
(t)x
0j
+B
n
j
0
(t)x
0j
0

n
j=0
B
n
j
(t)x
ij

n
j=0
B
n
j
(t)x
0j
+
B
n
j
0
(t)x
0j
0

n
j=0
B
n
j
(t)x
0j
+B
n
j
0
(t)x
0j
0
x
ij
0
x
0j
0
= (1 )y
i
(t) +y
ij
0
,
che permette di concludere.
Dunque, cambiando il peso del punto P
j
0
, nel modo indicato, i punti della curva razionale si spostano
lungo il segmento che li congiunge a P
j
0
secondo la quantit`a indicata. Nellenunciato precedente e nella
successiva dimostrazione, si sottintende di escludere i valori di t per cui il punto P(t) diventa un punto
improprio, oppure si annulla il denominatore di (t) (e quindi `e il punto P

(t) che esce dallo spazio ane).


Non aggiungiamo altro, lasciando al lettore il compito di sperimentare gli eetti sulla curva delle modiche
fatte ai vettori che rialzano i punti dati, anche nel caso in cui si tratti di punti impropri.
9

You might also like