bÉzierove krive
DESCRIPTION
Miloš Novković Nikola Ristovski Uroš Stegić Željko Jovanović. BÉZIEROVE KRIVE. OPIS BÉZIEROVE KRIVE. Označimo sa P skup određenih tačaka u ravni; P = {P 1 , P 2 , ... , P n } Bezierova kriva je zadata sa:. CRTANJE BÉZIEROVE KRIVE. Algoritam aproksimacija(Tacka *ktacke, int n) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/1.jpg)
BÉZIEROVE KRIVE
Miloš NovkovićNikola Ristovski
Uroš StegićŽeljko Jovanović
![Page 2: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/2.jpg)
OPIS BÉZIEROVE KRIVE
Označimo sa P skup određenih tačaka u ravni;
P = {P1, P2, ... , Pn} Bezierova kriva je zadata sa:
![Page 3: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/3.jpg)
CRTANJE BÉZIEROVE KRIVE
Algoritam aproksimacija(Tacka *ktacke, int n)
Ulaz: kontrolne tačke smeštene u niz (Tacka *ktacke), dimenzija niza (int n);
Izlaz: niz tačaka, dimenzije 1000, koji predstavlja aproksimaciju Bezierove krive (Tacka *P).
begin
P[0] = ktacke[0]
koef = 0.001
lambda = koef
![Page 4: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/4.jpg)
CRTANJE BÉZIEROVE KRIVE
i = 0
while i < 1000 do
while j < n do
niz[j] = ktacke[j]
P[i] = deCasteljau(niz, n, lambda)
i++
lambda += koef
return P
end
![Page 5: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/5.jpg)
CRTANJE BÉZIEROVE KRIVEAlgoritam deCasteljau(Tacka *ktacke, int n, float l)
Ulaz: niz kontrolnih tačaka, njegova dimenzija, preciznost aproksimacije;
Izlaz: Tačka dobijena nakon n-2 iteracije algoritma deCasteljau.
begin
if(n == 2)
Tacka q
Tacka AB
AB.x = ktacke[1].x - ktacke[0].x
AB.y = ktacke[1].y - ktacke[0].y
MnozenjeSkalarom(AB,l,&q)
ZbirVektora(ktacke[0],q,&q)
return q
![Page 6: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/6.jpg)
CRTANJE BÉZIEROVE KRIVE
else
i = 0
while i<n-1 do
AB.x = ktacke[i+1].x - ktacke[i].x
AB.y = ktacke[i+1].y - ktacke[i].y
MnozenjeSkalarom(AB,l,&q)
ZbirVektora(ktacke[i],q,&q)
P[i] = q
i++
return deCasteljau(P,n-1,l)
end
![Page 7: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/7.jpg)
PROMENA STEPENA KRIVE
Algoritam PovecajStepen(Tacka* ktacke, int n, int m, Tacka* niz)
Ulaz: niz kontrolnih tačaka, njegova dimenzija, stepen povećanja i novi niz;
Izlaz: popunjen niz niz.
begin
i = 0
kopiranje niza ktacke u niz niz
i = 0
while i<m do
Stepen(niz,n+1)
end
![Page 8: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/8.jpg)
PROMENA STEPENA KRIVE
Prva i zadnja (n-та) tačka u nizu ostaju iste jer se oblik krive ne menja. Od ostalih n-2 tačaka treba napraviti n-1, odnosno povećati stepen krive za jedan.
Svaka od tih tačaka se određuje pomoću formule:
![Page 9: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/9.jpg)
PROMENA STEPENA KRIVE
Algoritam Stepen(Tacka* niz, int n)Ulaz: niz kontrolnih tačaka kome treba dodati još
jednu tačku, dimenziju niza;Izlaz: niz sa dodatom jednom tačkom.begin //proširivanje niza za jedan niz[n] = niz[n-1] i = n-1
![Page 10: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/10.jpg)
PROMENA STEPENA KRIVE
while i>0 do
l, h - tacke
float w = (1.0 * i) / (n+1)
float v = 1 - ((1.0 * 1) / (n+1))
MnozenjeSkalarom(niz[i-1], w, &l)
MnozenjeSkalarom(niz[i], v, &h)
niz[i].x = l.x + h.x
noz[i].y = l.y + h.y
end
Složenost funkcije je О(m * n).
![Page 11: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/11.jpg)
PODELA KRIVE
Algoritam sadrži sledeće korake:
1) Prva kontrolna tačka krive takođe je i prva kontrolna tačka nove krive, kao i da je zadnja kontrolna tačka krive zadnja kontrolna tačka druge krive.
2) Izračunamo vektor od prve do druge kontrolne tačke, uzmemo njegovu polovinu i dodamo na prvu tačku.Rezultat je nova tačka.
AB.x = ktacke[i+1].x - ktacke[i].x
AB.y = ktacke[i+1].y - ktacke[i].y
MnozenjeSkalarom(AB,l,&q)
ZbirVektora(ktacke[i],q,&q)
![Page 12: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/12.jpg)
PODELA KRIVE
3) Ponavljamo korak 2) dok ne prođemo kroz sve tačke.
4) Ponavljamo korake 2) i 3) i svakim ponavljanjem imaćemo po jedan vektor manje. Ponavljanje se vrši dok ne dobijemo samo dve tačke, tj. Jedan vektor, odredimo njegovu polovinu i ta tačka predstavlja traženu tačku koja deli početnu Bezierovu krivu na dva jednaka dela.
![Page 13: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/13.jpg)
PODELA KRIVE
![Page 14: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/14.jpg)
PODELA KRIVE
Prvi set kontrolnih tačaka za prvu polovinu krive predstavljaju tačke dobijene u prvom deljenju vektora pri svakom od n deljenja,
tako da su kontrolne tačke prve polovine krivine (po oznakama na slici) 00, 10, 20, 30, 40, 50, 60.
Dalje primetimo da su kontrolne tačke druge krivedobijene pri svakom deljenju trenutnog poslednje vektora pri
svakom od n deljenja tako da su kontrolne tačke druge polovine krive (po oznakama na slici) 60, 51, 42, 33, 24, 15, 06.
Kao što možemo primetiti tačka koja se nalazi na sredini ili(po slici) 60 pripada obema krivima.
![Page 15: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/15.jpg)
APROKSIMACIJA
Krivu možemo aproksimirati na dva načina: Koristeći formulu iz definicije De Casteljau-ovim algoritmom
![Page 16: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/16.jpg)
APROKSIMACIJA
![Page 17: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/17.jpg)
APROKSIMACIJA
![Page 18: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/18.jpg)
APROKSIMACIJA
![Page 19: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/19.jpg)
UPOTREBA
Najčešća mesta gde se sreću krive: Fontovi Vektorska grafika Animacije
![Page 20: BÉZIEROVE KRIVE](https://reader030.vdocuments.net/reader030/viewer/2022020714/56814c88550346895db9a3df/html5/thumbnails/20.jpg)
DEMO