Bezierove krivulje



Uvod

     Bezierove krivulje možemo definirati na dva načina. Prvi način definiranja je Bezierovim težinskim funkcijama u slučaju korištenja gibanja vrha otvorenog sastavnog poligona. Drugi način je kada su težinske funkcije vezane uz vrhove kontrolnog poligona i definirane Bernsteinovim polinomima.

Bezierove krivulje definirane Bezierovim težinskim funkcijama

Bezierova krivulja definirana Bezierovim težinskim funkcijama je slijedeća :
p(t) je suma a_i * f_i,n(t)
gdje su:
p(t)      točke na krivulji (vektorski zapis x(t), y(t), z(t)),
ai         vektori kontrolnog poligona (između točke koje zadajemo),
fi,n      bazne (težinske) funkcije stupnja n.
Bazne funkcije definirane su polinomima:

,       

ili rekurzivnom formulom:

fi,n(t)=(1-t) fi,n-1+t fi-1,n-1,   f0,0(t)=1,   fk+1,k(t)=1,   f-1,k=1

Bezierove krivulje definirane Bernsteinovim polinomoma

 Krivulja Beziera definirana Bernsteinovim težinskim funkcijama je:



gdje su:

p(t)       točke na krivulji (vektorski zapis x(t), y(t), z(t)),
ri          vrhovi kontrolnog poligona (točke koje zadajemo),
bi,n       bazne (težinske) funkcije stupnja n.


Bazne funkcije definirane su Bernsteinovim polinomima:




Implementacija vježbe

Sama implementacija vježbe se sastoji od JAVA appleta u osnovi vrlo sličnom onom iz vježbe 7, ali je prikaz tijela smanjem te je dodan još jedan panel (MyWindow) na kojem se može nacrtati kontrolni poligon.
    Lijevim klikom miša na desni dio donjeg dijela appleta crta se vrh po vrh kontrolnog poligona.  Nakon što je odabrano dovoljno točaka desnim klikom miša se potvrđuje unos te se crtaju linije između kotrolnih točaka i same krivulje.
     Klikom miša na lijevi dio donjeg dijela appleta uključuje se animacija pomaka očišta prema izgledu krivulje. Pomak po krivulji s lijeva na desno odgovara povećanju x koordinate očišta, a pomak po kruvulji prema gore odgovara smanjenju z koordinate očista, ekvivalentno pomak prema dolje odgovara povečanju z koordinate očišta.
    U programu se koriste slijedeći razredi Ravnina, Vektor, Točka, Točka3D, TočkaNH, RubnaTočka, Matrix, MyWindow.


Demonstracija:


Napisao Andro Galinović