P rz ek sz ta łc en ia afi n ic zn e
Wewspółrzędnychkartezjańskich: f(p)=Lp+t, Loznaczamacierz3×3częściliniowej,ttowektorprzesunięcia. Wewspółrzędnychjednorodnychprzekształceniejestdokonywanezapomocą mnożeniaprzezmacierz A=⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣Lt 0001
⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦, ze.p)f(nupjetunktreekpzatemwtorAPre iąnzanezkokłkretnymuademsązwztńzeceObiererepntacjeprzeksał rt.hicskńjaezspkahycndzęłrów 1
In te rp re ta cj a „z w ykł a” id u al n a
Wzóropisującyprzekształceniefmożnainterpretowaćnadwasposoby: ●WektorAp+tskładasięzewspółrzędnychkartezjańskichnowegopunktu. ●WektorAp+tskładasięzewspółrzędnychkartezjańskichtegosamegopunktu wnowymukładziewspółrzędnych. 2 a) ov1v2p
f(p)
b) c=f−1(o) u1=l−1(v1) u2=l−1(v2) ov1
v2p c u1
u2 Przekształcenieafiniczneijegodualnainterpretacja 3
Macierzprzekształceniaafinicznegofmożnaprzedstawićwpostaci A=[w1w2w3t 0001]. Zatemjejkolumnysąwektoramiwspółrzędnychjednorodnychtrzechwektorów swobodnychijednegopunktu. Jeśliwektoryw1,w2,w3sąliniowoniezależne,torazemzpunktemtokreślająukład odniesieniadlanowegoukładuwspółrzędnychkartezjańskich. Punkttjestobrazempoczątkuobieżącegoukładuwspółrzędnych wprzekształceniuf,awektorwijestobrazemwersoraosieiwprzekształceniu liniowymlopisanymprzezmacierzL=[w1,w2,w3]. 4
Winterpretacjidualnej:niechc=f−1(o),u1=l−1(v1),u2=l−1(v2),u3=l−1(v3). Punktciwektoryu1,u2,u3stanowiąukładodniesieniadlaukładuwspółrzędnych, doktóregoprzeszliśmy,tj.Lp+tjestwektoremwspółrzędnychkartezjańskich danegopunktuwtymnowymukładzie. 5
Skł ad an ie p rz eks zt ał ce ń afi n ic zn yc h
NiechA1iA2będąmacierzamiprzekształceńf1if2,wykonanychkolejno. Jeśliobaprzekształceniasąokreślonewtymsamymukładziewspółrzędnych, tozłożenief=f2○f1,tj.przekształceniedanewzoremf(p)=f2(f1(p))jest reprezentowaneprzezmacierzA2A1. Jeśliprzekształceniapodajemywukładziezwiązanymzprzekształcanym przedmiotem,którynp.obracasięrazemztymprzedmiotem,towukładzie początkowymprzekształcenief1jestokreśloneprzezmacierzA1,amacierz przekształceniaf2wtymukładziejestrównaA1A2A−1 1. Kolejno:A−1 1opisujeprzejściedoukładuzmienionegoprzezf1,A2reprezentuje przekształcenief2wtymukładzie,A1opisujepowrótdoukładupoczątkowego. Złożenietakokreślonychprzekształceńjestopisaneprzezmacierz A1A2A−1 1A1=A1A2. 6 Pierwszysposóbskładaniaprzekształceńprzydajesię,gdyobracamyprzedmiot, abygooglądaćzróżnychstron. Zaczymspodichrąkwypełzłaszaramyszkacynowa, którapuszczającpyszczkiembańkimydlane,zarazem biegałapostole,aspodogonkasypałsięjejbiałykredowy pyłtakkunsztownie,iżpowstałztegokaligrafowanynapis: AWIĘCNAPRAWDĘNASNIEKOCHACIE? StanisławLem:Cyberiada Drugisposóbjeststosowanywtzw.graficeżółwia.Żółwchodzipopłaszczyźnie, wykonującpoleceniawrodzaju„Obróćsięoxstopniwlewo”lub„Wykonajkrok odługościywprzód”. 7P rz eks zt ał ca n ie w ek to ra n or m al n eg o
Wektornormalnypowierzchnijestjednymznajważniejszychelementówmodeli oświetlenia.Dowolnyobiektmożebyćopisanywtakimukładziewspółrzędnych, jakidajeprojektantowinajwiększąwygodę,alepotemtrzebawszystkieobiekty przekształcićtak,abybyłyodpowiedniorozmieszczonewzględemsiebie,czylidla każdegoobiektuprzejśćdowyróżnionegoukładuwspółrzędnychświata. Punktyprzekształcamybezpośrednio,wzoremf(p)=Lp+t. Wektoryswobodnesąróżnicamipunktów:jeśliv=p1−p2,toobrazemvjest f(p1)−f(p2)=Lp1+t−(Lp2+t)=L(p1−p2)=Lv. 8Wektornormalnypowierzchniniejestwektoremswobodnym.Sposóbjego przekształcaniawynikazrównaniapłaszczyzny:π={p∶nT(p−p0)=0}. Równanieobrazupłaszczyznyπwprzekształceniufto 0=mT (f(p)−f(p0))=mT L(p−p0). Równaniebędziespełnione,jeśliprzyjmiemym=L−Tn,bowtedy nT L−1 L(p−p0)=nT (p−p0)=0. Zauważmy,żeL−T=Lwtedy(itylkowtedy),gdymacierzLjestortogonalna,czyli gdyprzekształceniefjestizometrią. WogólnościmacierzyLmożnaużyćdoprzekształcaniawektoranormalnego, gdyprzekształceniefjestpodobieństwemgeometrycznym.Długośćwektora normalnegonaogółniejestistotna,wzastosowaniachzazwyczajwektorten normalizujemy,otrzymującwektorjednostkowyotymsamymkierunkuizwrocie. 9
R zu to wa n ie
Rzutowanierównoległe Szczególnymiprzypadkamirzutowaniarównoległegosąrzutowanieprostopadłe iaksonometria,najczęściejstosowanewrysunkutechnicznym. 10 Aksonometriajestzazwyczajrzutemukośnym,wktórymkierunekrzutowanianie jestprostopadłydorzutni. TwierdzeniePohlkegoorzeka,żedladowolnejczwórkipunktów(p0,p1,p2,p3) nieleżącychwjednejpłaszczyźnieidowolnejczwórkipunktów(q0,q1,q2,q3)na płaszczyźnie,takichżeżadnetrzyniesąwspółliniowe,istniejerzutniaikierunek rzutowania,wktórymobrazczwórki(p0,p1,p2,p3)jestfigurąpodobnądo czwórki(q0,q1,q2,q3). Natejpodstawiemożna(prawie)dowolniewybieraćobrazypoczątkuukładu współrzędnychijegowersorówosi. 11Najczęściejspotykanewrysunkutechnicznymrodzajeaksonometrii: kawalerskawojskowaizometryczna 12
Rzutowanieperspektywiczne 13
Perspektywa jednopunktowadwupunktowatrzypunktowa 14
R zu to w an ie w O p en G L -u
Przekształcenia,którympoddawanesąwierzchołkiwceluotrzymaniaobrazu,są kolejnymizmianamiukładówwspółrzędnych. ●Układwspółrzędnychmodelujesttoukład,wktórympodawanesąnawejście potokuprzetwarzaniagrafikiwspółrzędnepołożeniawierzchołków. Dlakażdegoobiektuwchodzącegowskładrysowanejscenymożebyćinny układwspółrzędnychmodelu. ●Układwspółrzędnychświatajesttojedenwspólnyukładwspółrzędnych,do któregonajpierwdokonujesięprzejściaodukładu(układów)współrzędnych modelu. Wukładziewspółrzędnychświatazazwyczajobliczasięoświetlenie,cienie ikolizjeobiektów. 15●Układwspółrzędnychobserwatoraokreślausytuowanie„kamery”względem rysowanejsceny. Najczęściejprzejścieodukładuświatadoukładuobserwatorajestizometrią, któraumieszczawświecieśrodekrzutowaniaperspektywicznegoiokreśla kierunek,wktórymtenobserwatorpatrzy. ●Układwspółrzędnychkostkistandardowej(normalizeddevicecoordinates, NDC)niejestkartezjański,jeślirzutowanieniejestrównoległe(czylinp.jest perspektywiczne). Kostkastandardowajesttosześcian[−1,1]3;jesttoobszar,któregozawartość możebyćwidocznanaobrazie—wszystko,cowystajepozaniązostanie obcięte. Przejścieodukładuobserwatoradoukładukostkistandardowej,jeśli rzutowaniejestperspektywiczne,jestprzekształceniemrzutowym, reprezentowanymprzezmacierz4×4. 16
●UkładwspółrzędnychklatkiOpenGL-ajesttoukładokreślonywpewnym prostokącienaekranie.Jednostkiositegoukładusąrówneszerokości iwysokościjednegopiksela. ●UkładywspółrzędnychoknaOpenGL-aisystemuokiensązwiązane zoknem,wktórymjestwyświetlanagrafika. Najczęściej(chybazawsze)układyklatkiOpenGL-aioknamająosiey(dalej oznaczamηiη′)zorientowaneprzeciwnieipoczątkiwinnychnarożnikach okna. 17
K la tk a w o kn ie
.ξlηb w .ξl
ηb w .
h H ξ
η
ξ′ η′ ξ=ξ′ η=H−1−η′ 18 Abyokreślićklatkęowskazanychwymiarachipołożeniuwoknie,trzebawykonać instrukcję glViewport(xil,etab,w,h); albo glViewport(xiprimel,H-h-etaprimet,w,h); Jeśliklatkamabyćcałymoknem,topiszemywprogramie glViewport(0,0,W,H); 19
Odwzorowaniekostkistandardowejnaklatkę .
x
y x
y z
y x .
x
y x
y z
y x . Toprzekształceniejestwykonywanemiędzyetapemobcinaniaaetapem rasteryzacji.Prosteokierunkuosizsąodwzorowanenapunkty.Zdwóchpunktów natakiejprostejpołożony„bliżejobserwatora”jestten,którymamniejszą współrzędnązwukładziekostkistandardowej. 20
Implementacjarzutowaniaperspektywicznego x
y z
a b Bryławidzeniajestściętymostrosłupem,określonymprzezpodaniesześciuliczb— l,r,b,t,n,f.Punktya=(l,t,−n)ib=(r,b,−n)sąwierzchołkamiostrosłupa, któregotylnaścianależywpłaszczyźniez=−f. 21
Literywoznaczeniachtychsześciuparametrówsąpoczątkamisłówleft,right, bottom,top,near,far. MacierzPreprezentującaprzekształcenie(kolineacjęrzutową)określonątak,aby obrazembryływidzeniabyłakostkastandardowa,orazjejodwrotnośćsądane wzorami P=⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣2n r−
l0r+l r−l0 0
2n t−t+b 0 bt−b fn2fn+ 00 n−fn−f 00−10
⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦−1 ,P=
⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣r−
l 2n00r+l 2n 0t−b 2n0t+b 2n 000−1 00n−f 2fnn+f 2fn
⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦. ddnychjednornłrychpunktu,zęoónPsprzezmaciePmrzowwtoekrymży enychwukładzi.kostkistandardejodoworrnotrzymjącwektouwhspdjeycndzęłró wędektorabozieróżnadtego1.aóowNaołwspgółrzędnawag 22 diajest(wukłaorzieobserwatzea)nyłidróDlarzwtowaniauwoległegobran śc.emniarołoadopstp x
y
z c
d Jestonokreślonyprzezpunktyc=(l,b,−n)id=(r,t,−f). 23
MacierzP,przekształcającabryłęwidzenianakostkęstandardowąiodwrotnośćtej macierzysądanewzorami P=⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣2 r−
l00l+r l−r 0
2 t−b+t 0 b−tb fn+2 00 fn−n−f 0001
⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣r− −1 ,P=
l 200l+r 2 0t−b 20b+t 2 00n−f 2n+f 2 0001
⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦. 24
Każdeurządzenierastrowemaokreślonytzw.aspekt—jesttoilorazszerokości iwysokościpiksela.Klatkaowymiarachw×hpikselimafizycznewymiary oproporcjiaw∶h.Abyuniknąćzniekształceńobiektów,podczasokreślaniabryły widzenia(wobuprzypadkach)trzebazapewnić,że(r−l)∶(t−b)=aw∶h. Obecnienajczęściejaspekta=1lubjesttoliczba,którejzastąpienieprzez1dajebłąd zaniedbywalny. 25
St er eo sk o p ia
Dwarzutyperspektywicznedlastereoskopiiwymagająwzięciapoduwagęczterech wymiarówfizycznych:rozstawuoczuobserwatora,odległościobserwatoraod płaszczyznyekranuorazszerokościiwysokościklatki. 26 Inaczejniżw„zwykłym”rzutowaniuperspektywicznym,trzebajednostkędługości układuwspółrzędnychobserwatorapowiązaćzwymiaramifizycznymi, wyrażanymiwmilimetrach—albo,wdrugąstronę,trzebawymienionewyżej wymiaryfizycznewyrazićwjednostkachukładuobserwatora,abynatejpodstawie ustalićparametryl,r,b,t,n,fwyznaczającebryły(ostrosłupy)widzenia.Dlaobu ostrosłupówparametryb,t,nifbędąwspólne. Najwygodniejjestprzyjąć,żeprzejściemiędzyukładamiwspółrzędnychświata iobserwatorajestzawszeizometrią—wtedyjednostkidługościwobuukładachsą takiesame. 27R zu ty n ie li n io w e
Inneniżrzutyrównoległeiperspektywiczneodwzorowaniaprzestrzeni trójwymiarowejnapłaszczyznęniezachowująwspółliniowościpunktów—obrazy odcinkówmogąbyćzakrzywione,coutrudniaichrysowane.Jeślitrzebawykonać obrazwtakimrzucie,toalbonależyużyćpodprogramówrysującychodpowiednie krzywe,alborozdrobnićodcinkiitrójkąty,zastępującjełamanymi lubpowierzchniamizbudowanymizdostateczniemałychtrójkącików. 28Najczęściejspotykanymodwzorowaniemnieliniowymjestpanorama,czylirzut środkowynarzutnięwalcową,następnierozwijaną.Środekrzutowaniaznajdujesię naosiwalca. 2930
A lg or yt m y ra st er yz ac ji
Dlaodcinkanależywyznaczyćpiksele,zktórychpowstaniejegoobraz. WyprowadzimyklasycznyalgorytmBresenhama. 31Założymy,żekońceodcinkamająwspółrzędnecałkowite(tj.pokrywająsięze środkamipikseli),(x0,y0)i(x1,y1).Chwilowoprzyjmiemyx1>x0,y1⩾y0. Wkażdejkolumnierastraodx0dox1wybierzemyjedenpiksel,pokolorujegojakaś proceduraSetPixel. Pierwszyalgorytm: ∆x=x1−x0;∆y=y1−y0;m=∆y/∆x; for(x=x0,y=y0;x<=x1;x++,y+=m) SetPixel(x,round(y)); Zmiennemorazyprzyjmująwartościułamkowe,zatemtrzebaużywaćarytmetyki zmiennopozycyjnej—jestkosztowniejszaniżstałopozycyjnaisąwniejbłędy zaokrągleń.Ponadtotrzebazaokrąglaćzmiennąy. 32
Wkażdejkolejnejkolumniealbopozostajemywpoprzednimwierszu,alboidziemy o1wierszwyżej—tozależy,środekktóregopikselajestbliższyrysowanegoodcinka, czylidajemniejszybłąd. b
b + m Tukropkioznaczająśrodkipikseli.Literaboznaczaodległośćpunktuprzecięcia odcinkazliniąpionowąrastraodśrodkapiksela(czylibłąd).Wnastępnejkolumnie błądjestrównyb+m,jeślijestonwiększyniż1/2,toprzejdziemydonastępnego wiersza. 33
Drugialgorytm: ∆x=x1−x0;∆y=y1−y0;m=∆y/∆x; for(x=x0,y=y0,b=0;x<=x1;x++){ SetPixel(x,y); b+=m; if(b>0.5){y++;b-=1.0;} } Terazzmiennayprzyjmujetylkowartościcałkowite,alezmiennemibmogąmieć wartościułamkowe. Wszystkieułamki,któremogąbyćwartościamitychzmiennychsąilorazamiliczb całkowitych,zmianownikiem2∆x.Możemywięcprowadzićrachunkitylkona licznikachtychułamków. 34 AlgorytmBresenhama: ∆x=x1−x0;∆y=y1−y0; for(x=x0,y=y0,c=−∆x;x<=x1;x++){ SetPixel(x,y); c+=2∆y; if(c>0){y++;c-=2∆x;} } Tuwszystkiedziałaniasąwykonywanenaliczbachcałkowitych.Jeśliniejest spełnioneograniczeniex1>x0,y1⩾y0,totrzebazamienićwspółrzędnex,yrolami iodpowiedniodobraćznakiprzyrostówzmiennych. 35
dx=x1−x0;g=dx>0?+1:-1;dx=abs(dx); dy=y1−y0;h=dy>0?+1:-1;dy=abs(dy); if(dx>dy){ for(x=x0,y=y0,c=-dx;x!=x1;x+=g){ SetPixel(x,y); c+=2*dy; if(c>0){y+=h;c-=2*dx;} } else{ for(x=x0,y=y0,c=-dy;y!=y1;y+=h){ SetPixel(x,y); c+=2*dx; if(c>0){x+=g;c-=2*dy;} } } 36
A lg or yt m z p ły w aj ąc ym h or yz on te m
Wykresfunkcjidwóchzmiennychwrzucieaksonometrycznymz„widocznością”: ξ ηwh
wx hx hz 37
Narysujemysiatkęliniinapowierzchniz=f(x,y)dlafunkcjiciągłej f∶[xmin,xmax]×[ymin,ymax]→[zmin,zmax]⊂R. Abyskonstruowaćrzutaksonometryczny,trzebapodaćnaprzykładwymiaryw,h prostokątaotaczającegowykresiwymiarywx,hxihz.Obrazamipunktów (xmin,ymin,zmin),(xmin,ymin,zmax),(xmax,ymin,zmin),(xmax,ymax,zmin)będą punkty(wx,hz),(wx,0),(0,hx+hz)i(w−wx,h,).Natejpodstawiełatwojest znaleźćwspółczynnikiaξ,...,dξiaη,...,dηwystępującewewzorach ξ=aξx+bξy+cξz+dξ, η=aηx+bηy+cηz+dη. 38 Rysowaniejestwykonywane„odprzodudotyłu”.Podczasrysowaniaodcinka odcinkinarysowanewcześniejokreślają„obszarzasłonięty”.Obszartenjest reprezentowanyprzezdwietabliceliczbcałkowitychzwanehoryzontami,hbiht. Każdyelementtablicodpowiadakolumniepikseli. Zgodniezorientacjąosiη,wszystkimelementomhoryzontudolnego(hb)jest przypisywanawartośćpoczątkowa−1,agórnego(ht)h+1;wartościelementów dolnegohoryzontubędąrosnąć,agórnegomaleć.Wkolumniexobszarzabroniony dorysowaniajestmiędzywierszamiht[x]ihb[x](jeśliht[x]>hb[x]),to obszarzabronionyjestpusty. 39
Jeślipiksel(x,y)rysowanegoodcinkaspełniawarunekht[x]<=y<=hb[x], toznajdujesięwobszarzezabronionyminależygopominąć.Wprzeciwnymrazie jestalboy<ht[x](pikseljestnadgórnymhoryzontem)alboy>hb[x](piksel jestponiżejdolnegohoryzontu).Należygonarysować(możnauzależnićkolorod tego,któraztychnierównościjestspełniona)iprzypisaćwspółrzędnąy odpowiedniemuhoryzontowi(alboobu,jeślitojestpierwszyrysowanypiksel wkolumniex). 40
Problememjestuniknięciesytuacji,wktórejpikseleodcinkazasłaniająinnepiksele tegosamegoodcinka,znajdującesięwtejsamejkolumnieijeszczenienarysowane. Abysobieztymporadzić,odcinkitrzebarysowaćdwukrotnie.Zapierwszymrazem sprawdzamynierównościirysujemywidocznepiksele,aleniezmieniamy zawartościhoryzontów.Zadrugimrazemuaktualniamyhoryzonty,jużbez rysowania. Całkowiciepoprawnyefektuzyskamy,rysującodcinkiparami(tj.najpierw rysujemydwamającewspólnykoniecodcinki—obrazyodcinkówrównoległychdo płaszczyznxziyz,anastępnieuaktualniamyhoryzontydlaobutychodcinków. 41
R as te ry za cj a o kr ęg u
Rachunkipotrzebnedonarysowaniaokręgu,któregopromieńriwspółrzędne środkasąliczbamicałkowitymirównieżmożnasprowadzićdodziałań stałopozycyjnych.Jeśliśrodkiemjestpunkt(0,0),tomającjedenpiksel,(x,y), możemypodać7innychpikseli,zamieniającwspółrzędneinadającimwszystkie kombinacjeznaków. 42 Rozważmydwietożsamości: x ∑ i=0(2i+1)=(x+1)2 , r ∑ i=y(2i−1)=r2 −(y−1)2 . Funkcja f(x,y)=x ∑ i=0(2i+1)−r ∑ i=y(2i−1)=∶(x+1)2 +(y−1)2 −r2 mawartość0,jeślipunkt(x+1,y−1)leżynaokręgu,jestdodatniajeślinazewnątrz iujemnajeślileżywewnątrz. 43Będziemywyznaczaćpiksele(x,y),takieże0⩽x⩽y⩽r,otrzymującpozostałe zsymetrii.Wystartujemyodpiksela(0,r)ibędziemywkażdymkrokuzwiększaćx iwpewnychkrokachzmniejszaćy. Wartośćfunkcjifprzyjmiemyzamiarębłędu;ponarysowaniupiksela(x,y) współrzędnąyzmniejszymy,jeśli ∣f(x,y)∣<∣f(x,y+1)∣. (x,y) (x + 1,y − 1) 44
Niechc=f(x,y).Wtedy f(x,y+1)=c+2y−1,f(x+1,y)=c+2x+3,f(x+1,y−1)=f(x+1,y)−2y+3. Podczasrysowaniazawszewybieramymiędzypikselemwewnątrzinazewnątrz okręgu,czylimamyf(x,y)⩽0⩽f(x,y+1).Toumożliwiauniknięcieobliczania wartościbezwzględnych:warunekrównoważnynierówności ∣f(x,y)∣<∣f(x,y+1)∣to−c<c+2y−1,czyli2c>1−2y.Stądalgorytm: for(x=0,y=r,c=2*(1-r);x<=y;x++,c+=2*x+1) { Set8Pixels(x,y); if(2*c>1-2*y){ y--; c+=1-2*y; } } 45
Oczywiście,naekraniezobaczymyokrąg,jeśliwspółczynnikaspekttegoekranujest równy(lubdostateczniebliski)1.Wprzeciwnymrazietrzebabynarysowaćelipsę, którejosiegłównesąrównoległedokrawędziekranuiktórychdługościsą odpowiedniodobrane. Możnanarysowaćelipsę,którejpółosie—poziomaipionowa—majądługościa ib.Algorytm,którytorobi,polegananarysowaniuokręguopromieniur=ab, przyczymraster,naktórymtosięodbywajestwirtualny.Współrzędnąxnatakim rastrzezwiększamyob,awspółrzędnąyzmniejszamyoa.Tooznaczakonieczność dodawaniadoiodejmowaniaodzmiennejckolejnychskładnikówwsumach użytychdozdefiniowaniafunkcjif.Oczywiście,po„fizycznym”rastrzeporuszamy sięwobukierunkachzkrokiem1. 46 Zatem,bierzemyr=abiokreślamyfunkcję f(x,y)=(x+b)2 +(y−a)2 −r2 =x+b−1 ∑ i=0(2i+1)−r ∑ i=y−a+1(2i−1). Mamystąd f(x,y+a)=f(x,y)+(2y−a)a, f(x+b,y)=f(x,y)+(2x+3b)b, f(x+b,y−a)=f(x+b,y)+(3a−2y)a. Wchwilirysowaniapiksela(x,y),mamyobliczonec=f(x,y).Idączkrokiemb wlewo,decydujemy,czyiśćteżzkrokiemawdół.Wtymceluporównujemy ∣f(x,y)∣i∣f(x,y+b)∣,czylirównoważniesprawdzamywarunek −c<c+(2y−a)a,czyli2c+(2y−a)a>0—jeślijestspełniony,toidziemy takżewdół,odpowiedniouaktualniającwartośćzmiennejc. Obrazelipsymatylkoczterokrotnąsymetrię,amożnanarysowaćtylko1/8łuku, dlax⩽y.Drugąpołowęćwiartkiłuku(dlax>y)trzebanarysowaćosobno, wpodobnysposób. 47
Innysposóbrysowaniakrzywych(wtymelips)poleganaobliczeniuciągupunktów nakrzywejizastąpieniatejkrzywejprzezłamaną(apotemnarysowanieodcinków). Gęstośćpunktównakrzywejmożnadobraćadaptacyjnie,abyosiągnąćwymaganą dokładnośćmożliwiemałymkosztem. Elipsęwpołożeniuogólnymmożnareprezentowaćprzezpodanieśrodka iwektorówpółosisprzężonych.Osiesprzężonesąobrazamiśrednicprostopadłych okręguwprzekształceniuafiinicznymprzeprowadzającymtenokrągnadanąelipsę. 48
Niechv0iv1oznaczająwektorywyznaczającekońcełukuokręguzajmującegokątα. Wektorwyznaczającypunktwpołowietegołukujestrównyv=(v0+v1)/c,gdzie c=2cosα/2.Możemyprzyjąćci=cosπ/2i+1iobliczyć(wpreprocesingu) kilka(naście)początkowychwyrazówciągu1/c0,...,1/cn−1.Toumożliwi rekurencyjnedzieleniełukuokręgunapołowy,ćwiartkiitd. Zamiastwzajemnieprostopadłychwektorówotejsamejdługości(półosi sprzężonychokręgu)możemynapoczątkurekurencjiprzyjąćdwadowolnewektory —odpowiadającepółosiomsprzężonymelipsy.Wtedykolejnepunktypodziału będąpunktamitejelipsy. Zatrzymanierekurencjimożenastąpićzpowoduosiągnięciamaksymalnej głębokościlubpootrzymaniudostateczniekrótkiegoodcinka. 49
Wersjarekurencyjnamożebyćmniejwięcejtaka: voidrElipsa(k,s,v0,v1) { if(k==n||dostatecznieblisko(v0,v1)) rysujodcinek(c+v0,c+v1); else{ v2=a[k]*(v0+v1); rElipsa(k+1,s,v0,v2); rElipsa(k+1,s,v2,v1); } }/*rElipsa*/ Pierwszyparametrwywołaniawaplikacjimabyćrówny0. 50
W yp eł n ia n ie w ie lo ką tó w
Dobrzezaprojektowanaprocedurarasteryzacjipowinnazapewniaćjednoznaczność „zaklasyfikowania”pikselidowielokątówowspólnychbokach.Doobrazuwielokąta należątepiksele,którychśrodkisąwewnątrz.Cozpikselaminabrzegu? 51Przykładowo: Jeślibezpośrednionaprawoodśrodkapikselasąpunktynależącedownętrza wielokąta,totenpikselnależydoobrazuwielokąta. Jeślinaprawoodśrodkapikselajestkrawędźpozioma,topikselnależydoobrazu wielokąta,gdybezpośrednioponiżejjestwnętrzelublewakrawędźpionowa wielokąta. Dziękitakiej(lubpodobnej)umowiepłaszczyznapokrytawielokątamimającymi tylkowspólnekrawędzielubwierzchołkizostaniepomalowanapoprawnie—każdy pikselotrzymakoloritotylkoraz. StandardOpenGLnienarzucakonkretnejumowydlaimplementacji. 52
Regułaparzystości:punktnieleżącynabrzegu(ograniczonego)wielokątajest wjegownętrzu,jeślidowolnapółprostawychodzącaztegopunktuprzecinabrzeg wnieparzystejliczbiepunktow. Sekwencyjnyalgorytmwypełnianiawielokątapoziomymiodcinkamiużywatablicy krawędziaktywnych.Krawędźjestaktywna,jeśliniejestpoziomaidlaustalonegoy mapunktwspólnyzprostąpoziomąnawysokościy.Dlakażdejkrawędzi niepoziomejodrzucamyjejdolnykoniec. Zgodniezregułąparzystościliczbakrawędziaktywnychjestzawszeparzysta. 53
Algorytm:(zakładam,żewierzchołkimająwspółrzędnecałkowite) ●Napodstawietablicywierzchołkówutwórztablicękrawędzi(parkolejnych wierzchołków),wtymkrawędź„zamykającą”(xn−1,yn−1)(x0,y0).Pomiń wszystkiekrawędziepoziome. ●Jeślidladowolnejkrawędzi(xi,yi)(xi+1,yi+1)jestyi+1<yi,toprzestaw końcetejkrawędzi. ●Posortujkrawędziewtablicywkolejnościrosnącychwspółrzędnychy pierwszegowierzchołka. ●Utwórzpoczątkowopustątablicękrawędziaktywnych. 54 ●Wpętli,dlazmiennejyprzebiegającejodminimalnejdomaksymalnej współrzędnejyliniirastramającychprzecięciezwielokątem. –Usuńztablicykrawędziaktywnychwszystkiekrawędzie,którychdrugi koniecjestnawysokościy. –Dołączdotablicykrawędziaktywnychwszystkiekrawędzie,których pierwszykoniecjestnawysokościy. –Obliczwspółrzędnąxprzecięciakażdejkrawędziaktywnejzprostą poziomąnawysokościy. –Posortujtablicękrawędziaktywnychwkolejnościrosnących współrzędnychxpunktówprzecięcia. –Wypełnijkolorempoziomeodcinkinawysokościymiędzykolejnymi paramipunktówprzecięcia. 55
AlgorytmrasteryzacjiwimplementacjachOpenGL-adopuszczatylkotrójkąty, aponadtodopuszczaułamkowe(wreprezentacjizmiennopozycyjnej)współrzędne wierzchołków.Ponadtoalgorytmpracujewewspółrzędnychjednorodnych, obliczającdlakażdegopiksela(równolegle)współrzędnązwukładziekostki standardowej.Jestonapotrzebnadotestówwidocznościijestteżprzekazywanana wejścieszaderafragmentów,którymożejejużyćwdowolnymobliczeniu,atakże zmienić(comawpływnawynikitestuwidoczności,wykonywanegopóźniej). AlgorytmrasteryzacjiOpenGL-adokonujetakżeinterpolacjiwszystkich dodatkowychatrybutówwierzchołkówtrójkąta.Algorytmjestrównoległy. 56
Wierzchołkitrójkątasąreprezentowaneprzezwektorywspółrzędnych jednorodnych,Pi=(Xi,Yi,Zi,Wi).Wszystkiewagimajątensamznak.Najpierw trzebaznaleźćwierzchołki,któremająnajmniejsząinajwiększąwspółrzędnąy. p0 p1 p2
pLpR DlapoziomejliniirastranawysokościytrzebaznaleźćpunktypLipR—przecięcia bokówtrójkątaztąlinią,przyczymnajpierwtrzebaustalić,któretosąboki.Dalej przyjmę,żejesttakjaknarysunku. 57
Parametryczneprzedstawienieodcinkap0p1wreprezentacjijednorodnej: {P∶P=(1−t)P0+tP1,t∈[0,1]}. PoszukujemytakiegopunktuPL=(X,Y,Z,W),dlaktóregoY/W=y.Zrówności (1−t)Y0+tY1 (1−t)W0+W1=y wynika t=−Y0−W0y (Y1−Y0)−(W1−W0)yorazxL=XL WL=(1−t)X0+tX1 (1−t)W0+tW1. PodobnieznajdujemypunktPRiwspółrzędnąxRpunktupR.Tomożnazrobić równolegledlawszystkichpoziomychliniirastraprzeciętychprzeztrójkąt. 58 MającdlaustalonegoypunktyPLiPR,możnadlarównolegledlakażdegopiksela (x,y)odcinkaPLPRobliczyćpunktPtrójkąta,odwzorowanynatenpiksel.Jest P=(1−s)PL+sPR,s=−XL−WLx (XR−XL)−(WR−WL)x idalejanalogiczniejakwpoprzednimkroku.Wszczególnościdajeto współrzędnąz,czyligłębokość,potrzebnąwobliczeniachwidoczności. Wszystkieatrybutydodatkowesąinterpolowanepodobniejakwspółrzędne jednorodne.Jeśliatrybutmakwalifikatornoperspective,toparametrytissą obliczanenapodstawiekartezjańskichwspółrzędnychwierzchołkówtrójkąta— skutkujetoinnymwynikieminterpolacji. 59
O b ci n an ie o d ci n ka
Zacznijmyodznajdowaniaczęściwspólnejodcinkanapłaszczyźnie,danegoprzez punktykońcowep0,p1,zprostokątem(klatkąwoknie). HistorycznienajstarszyjestalgorytmSutherlanda–Cohena,którydzieli płaszczyznęna9obszarówprostymi,naktórychleżąbokiprostokąta. Zkażdąprostąjestzwiązany1bitwkodzieprzyporządkowanymdowolnemu punktowipłaszczyzny;sąwięcczterobitowekody.Bitjestzerem,jeślipunktleżypo „właściwej”stronieprostejijedynkąwprzeciwnymrazie. 60Pierwszymkrokiemjestznalezieniekodówodpowiadającychkońcomodcinka.Jeśli koniunkcjabitowaobukodówniejestzerem,toobakońceodcinkależąpo „niewłaściwej”stroniepewnejprostejiwtedycałyodcineknależyodrzucić. 010100011001 010000001000 011000101010 1001 & 1010 = 1000 /= 0000
a)b) Jeśliobakodysąrówne0,tocałyodcinekmieścisięwprostokącie. 61
Jeśliktóryśkodniejestzerem,alekoniunkcjabitowakodówjestzerem,to:jeślikod punktup0jestzerem—zamieniamypunktyiichkody. Następnie,napodstawiekodu,wyznaczamyprostąprzecinającąodcinek iznajdujemypunktprzecięcia.Zastępujemypunktp0przeztenpunktiznajdujemy jegokod.Bitodpowiadającytejprostejwtymkodziemawrtość0(towymuszamy, abyskompensowaćbłędyzaokrągleń). 62 Ipowtarzamyobliczenie—ażznajdziemyprzecięcieodcinkazprostokątemlub odrzucimywszystkiejegokawałki. Algorytmjestdośćkosztowny,bowyznaczasięwnimpełnekody,którychniektóre bitymogąwdalszychobliczeniachbyćniepotrzebne.Ponadtojesttukumulacja błędówzaokrągleń—odrzucamypoczątkowąreprezentacjęodcinka(tj.oryginalne końce)idrugiinastępnepunktyprzecięciawyznaczamynapodstawiepunktów nieoryginalnych. 63
AlgorytmLianga–Barsky’ego Wtymalgorytmiepunktyp0ip1utrzymujemyażdoostatecznegoobliczenia końcówprzecięciaodcinkazprostokątemiwykonujemytylkoobliczeniakonieczne wdanymetapie.Częśćodcinkareprezentujemyzapomocądwóchliczb,t0it1,które określająprzedziałzmiennościparametru:mamyodcinek {p=(1−t)p0+tp1∶t∈[t0,t1]}. Początkowot0=0,t1=1,późniejt0możebyćzwiększaneat1zmniejszane. Zauważmy,żemożemyprzyjąćdowolnepoczątkowewartościtychparametrów, poddającobcinaniudowolnyodcinekprostejp0p1.Jeśliprzyjmiemypoczątkowo t0=−∞,t1=∞,tomamyalgorytmobcinaniaprostej. 64
charLBTest(floatp,floatq,float*t0,float*t1) { floatr; if(p<0.0){ if((r=q/p)>*t1)returnfalse; elseif(r>*t0)*t0=r; } elseif(p>0.0){ if((r=q/p)<*t0)returnfalse; elseif(r<*t1)*t1=r; } elsereturnq<0.0; returntrue; }/*LBTest*/ 65
charLBClip(punkt*p0,punkt*p1) { floatt0,t1,dx,dy; t0=0.0;t1=1.0;dx=p1->x-p0->x; if(LBTest(-dx,p0->x-xmin)) if(LBTest(dx,xmax-p0->x)){ dy=p1->y-p0->y; if(LBTest(-dy,p0->y-ymin)) if(LBTest(dy,ymax-p0->y)){ if(t1!=1.0) {p1->x=p0->x+t1*dx;p1->y=p0->y+t1*dy;} if(t0!=0.0) {p0->x+=t0*dx;p0->y+=t0*dy;} returntrue; } } returnfalse; }/*LBClip*/ 66 Odpowiedniouogólniającprzedstawionewyżejalgorytmy,możnajedostosowaćdo obcinaniaodcinkówwprzestrzeni(odowolnymwymiarze)dowielościennego obszaruwypukłego.Takiobszarjestprzecięciemskończeniewielupółprzestrzeni. Każdypunktkońcowyobciętegoodcinkajestalbooryginalnymkońcemalbo punktemprzecięciaodcinkazhiperpłaszczyznąbędącąbrzegiemjednej zpółprzestrzeni. Łatwomożnateżtakzmienićalgorytmy,abywykonywałyobliczeniawe współrzędnychjednorodnych. 67
O b ci n an ie w ie lo ką tó w
AlgorytmSutherlanda–Hodgmanamanaceluznalezienieprzecięciawielokąta zpółprzestrzenią.Jeślimabyćzmalezioneprzecięciedanegowielokąta zwielościanemwypukłym,totrzebawykonaćtenalgorytmtylerazy,ilewielościan maścian(chyba,żewcześniejzostanieodrzuconywcałości). Rozróżniamystronyhiperpłaszczyzny,czylipółprzestrzenie,jednąznichnazywając „wewnętrzną”. wewn.zewn.wewn.zewn.wewn.zewn.wewn.zewn. 68voidSHClip(intn,punktw[]) { s=w[n-1];is=Inside(s); for(i=0;i<n;i++){ p=w[i];ip=Inside(p); if(is){ if(ip)Output(p); elseOutput(q=Intersect(s,p)); } elseif(ip){ Output(q=Intersect(s,p)); Output(p); } } }/*SHClip*/ 69
PomocniczeproceduryInside,IntersectiOutputodpowiedniosprawdzają, poktórejstroniejestdanypunkt,znajdująprzecięcieodcinkazhiperpłaszczyzną iwyprowadzająkolejnypunkt—wierzchołekczęściwspólnejwielokąta zpółprzestrzenią. Jeślidanywielokątniejestwypukły,tojegoprzecięciezobszaremwielościennym możebyćniespójne.Wtedypojawiająsię„fałszywekrawędzie”obciętegowielokąta. Tenproblemniedotyczyobcinanychtrójkątów. 70 AlgorytmWeilera–Athertonasłużydoznajdowaniaprzecięcia,atakżesumy iróżnicydwóchdowolnychwielokątów.Mogąonebyćniespójnelub niejednospójne.Wodróżnieniuodpoprzedniegoalgorytmu,rozwiązywane zadaniejestpłaskie,ponieważistotnąrolęodgrywatuorientacjabrzegukażdego zwielokątów,aonajestokreślonawpłaszczyźnie.Oczywiście,płaszczyznatamoże byćzanurzonawprzestrzenitrój-iwięcejwymiarowej. Zakładamy,żebrzegkażdegowielokątaskładasięzjednejlubkilkułamanych zamkniętych.Każdakrawędźbrzegujestzorientowana(mapoczątekikoniec). Idącpobrzeguzgodniezjegoorientacją,wnętrzewielokątamamyzawszepoprawej stronie. Zkażdegowierzchołkawychodziidokażdegowchodzidokładniejednakrawędź. 71
Dlatakiejreprezentacjiwielokątałatwojestznaleźćjegodopełnienie—wystarczy odwrócićorientacjęwszystkichkrawędzi.Dlategomającproceduręznajdowania przecięciawielokątówmożemywyznaczyćtakżeichsumę(dopełnienieprzecięcia dopełnień)iróżnicę(przecięciepierwszegowielokątazdopełnieniemdrugiego). Algorytmbudujepewiengrafskierowany,któregowierzchołkamisąwierzchołki danychwielokątówipunktyprzecięciakrawędzi,akrawędziamisąkrawędzie wielokątówlubichfragmenty.Następniegraftenjestprzeszukiwanywcelu wyprowadzeniałamanych,zktórychskładasiębrzegprzecięcia. 72
Początkowografjestsumągrafówreprezentującychbrzegiwielokątów: 73
Nowewierzchołkidzieląkrawędziewpunktachprzecięcia: 74 GrafjestprzeszukiwanymetodąDFS: 75
Zaznaczamywszystkiewierzchołkijakonieodwiedzone.Zaczynającoddowolnego nieodwiedzonegowierzchołka,badamy,czyjestonwierzchołkiemprzecięcia wielokątów.Jestnimkażdywierzchołeknaprzecięciukrawędzi,lubwierzchołek dowolnegowielokątaznajdującysięwewnętrzudrugiego. Obchodzimygrafzgodniezorientacjąkrawędzi,ażtrafimydowierzchołka, zktóregowyszliśmy.Jeślitojestwierzchołekprzecięcia,towychodzązniegodwie krawędzie,zktórychjednawchodzidownętrzajednegozwielokątów—iponiej idziemy. Przechodzącprzezwierzchołekprzecięcia,zawszeprzeskakujemynawychodzącą zniegokrawędźinnegowielokątaniżten,poktóregokrawędziszliśmy.Wierzchołki zaznaczamyjakoodwiedzoneiwyprowadzamy. Algorytmzatrzymujesię,gdyjużniemanieodwiedzonychwierzchołkówprzecięcia. 76
Jeśliwielokątymająodpowiedniominkrawędzi,tokosztalgorytmumożebyć rzędumnijesttokosztoptymalny,jeślikażdakrawędźjednegowielokątaprzecina wszystkiekrawędziedrugiego.Częstopunktówprzecięciajestmniej.Etap znajdowaniaprzecięćkrawędzimożnaprzyspieszyć,korzystającztakichtechnik geometriiobliczeniowej,jakzamiatanielubużyciedrzewabinarnegopodziału płaszczyzny. Druginajbardziejkosztownyelementalgorytmutobadanie,czydanypunkt (wierzchołekwielokąta)leżywewnątrz(drugiego)wielokąta.Kosztsamego przeszukiwaniagrafujestproporcjonalnydoobjętościdanychopisującychwynik. Najwięcejproblemówsprawiająbłędyzaokrągleń,gdypewienwierzchołekleżyna lubbardzobliskokrawędzi,którejniejestkońcem.Takżeproblematycznebywają sytuacje,gdypewnekrawędziewielokątówpokrywająsię.Obsługatychsytuacji komplikujeimplementacjetegoalgorytmu,aleniemożnaichuniknąć. 77
ObcinaniewOpenGL-ujestwykonywanejakoostatnietapczęściprzedniejpotoku przetwarzaniagrafiki.Wszystkiepunkty,odcinkiitrójkąty,któretrafiajądotego etapu,sąobcinanedokostkistandardowej.Opróczsześciupłaszczyznkostki, aplikacjamożeokreślićpewnąliczbędodatkowychpłaszczyznobcinających.Robi siętotak: Równaniepłaszczyznyprzechodzącejprzezpunktp0=(x0,y0,z0),której wektoremnormalnymjestn=(a,b,c)mapostać ax+by=cz+d=0, gdzied=−ax0−by0−cz0=⟨n,o−p0⟩.Wewspółrzędnychjednorodnychjest aX+bY+cZ+dW=0.(*) NiechW>0.Zależnieodznakuwyrażeniapolewejstronie,punkt p=(X/W,Y/W,Z/W)leżynapłaszczyźnieobcinającej(jeśli0),po„właściwej” stronie(jeśliznakjestdodatni)lubpo„niewłaściwej”(jeśliujemny). 78 Dlawierzchołka(odcinkalubtrójkąta)trzebapodaćwartośćwyrażenia(*)lub dowolnegoinnego—pełnionorolęodległościzeznakiemodpłaszczyzny obcinającej.Jeśliwierzchołkiodcinkalubkrawędzimająróżneznaki,tona podstawieinterpolacjitychodległościOpenGLwyznaczypunktnapłaszczyźnie iodrzuciodpowiedniączęśćodcinka(lubtrójkąta). Wwynikuobcinaniatrójkątadokostkistandardowejmożepowstaćnawet ośmiokątwypukły,akażdadodatkowapłaszczyznaobcinającamożesprawić,że powstaniewielokątwypukłyojeszczejednymwierzchołku.Takiwielokątjest dzielonynatrójkąty,przekazywanenastępniedoetapurasteryzacji. Podczasobcinanianastępujeinterpolacjawszelkichatrybutówwierzchołków— równieżtukorzystasięzodległościzeznakiem(*). 79
Wtreściostatniegoszaderaczęściprzedniejtrzebanapisaćdeklarację outfloatglClipDistance[1]; (lubpodaćinnądługośćtejtablicy,jeślichcemywprowadzićwięcejpłaszczyzn obcinających)iwyprowadzającwierzchołek,przypisaćelementomtablicy odpowiedniewartości. Waplikacji,przedrysowaniem,trzeba„włączyć”obcinanie;dlai-tejpłaszczyzny robitoinstrukcja glEnable(GLCLIPDISTANCE0+i); (wyłączasięzapomocąproceduryglDisable). 80
E le m en ty m od el owa ni a ge om et ry cz ne go
KrzywaBézierastopnianjesttoreprezentacjaparametrycznejkrzywej wielomianowejwpostaciciągun+1punktówkontrolnych.Takzwanałamana kontrolna,którejwierzchołkamisątepunkty,przybliżakształtkrzywej. p0p1p2 p0p1p2 p3 p0p1p2 p3 p4p0p1p2 p3 p4p5 81ParametryzacjakrzywejBézierajestdanawzorem p(t)=n ∑ i=0piBn i(t), wktórymwystępująwielomianybazoweBernsteina Bn i(t)def =(n i)ti (1−t)n−i ,i=0,...,n. Zatemistotnie,jesttoparametryzacjawielomianowastopniaconajwyżejn. Dziedzinąparametryzacjimożebyćdowolnyprzedział[a,b],alezazwyczaj przyjmujesię,żet∈[0,1]. 82 Abyzbadaćwłasnościreprezentacjiiotrzymaćzniejużytecznealgorytmy, udowodnimywzórrekurencyjny B0 0(t)=1, Bn i(t)=(1−t)Bn−1 i(t)+tBn−1 i−1(t)dlan>0, wktórymprzyjmiemyumowę,żeBn i(t)≡0dlai<0orazi>n. Bezpośredniosprawdzamy,żeB0 0(t)=(0 0)t0(1−t)0. Dlan>0orazi∈{1,...,n−1}piszemy (1−t)Bn−1 i(t)+tBn−1 i−1(t)= (1−t)(n−1 i)ti (1−t)n−i−1 +t(n−1 i−1)ti−1 (1−t)n−i = ((n−1 i)+(n−1 i−1))ti (1−t)n−i =(n i)ti (1−t)n−i =Bn i(t). Jeślii=0lubi=n,totenrachunekmożemywykonać,pomijającskładnik, wktórymwystępujeczynnikzerowyBn−1 −1(t)lubBn−1 n(t). Jest(n−1 0)=(n−1 n−1)=(n 0)=(n n)=1.◻ 83
Mającudowodnionywzór,dlan>0obliczmy p(t)=n ∑ i=0piBn i(t)=p0Bn 0(t)+n−1 ∑ i=1piBn i(t)+pnBn n(t) =(1−t)p0Bn−1 0(t)+n−1 ∑ i=1pi((1−t)Bn−1 i(t)+tBn−1 i−1(t))+tpnBn−1 n−1(t) =(1−t)n−1 ∑ i=0piBn−1 i(t)+tn−1 ∑ i=0pi+1Bn−1 i(t). Punktp(t)możemyzatemotrzymać,dokonującinterpolacjimiędzypunktami dwóchkrzywychBézierastopnian−1:pierwszaznichjestreprezentowanaprzez punktyp0,...,pn−1,adrugaprzezpunktyp1,...,pn. Idącdalejtymtropem,możemydojśćdopunktównakrzywychstopnia0:dla każdegoijest∑
0 i=pBi0
0 0(t)=p.i 84
StądwynikaalgorytmdeCasteljau:mającdanepunktyp0,...,pniliczbęt, oznaczymyp(0) i=piiobliczymy for(j=1;j<=n;j++) for(i=0;i<=n-j;i++) p(j) i=(1−t)p(j−1) i+tp(j−1) i+1; Ostatniobliczonypunkttop(n) 0=p(t). p0
p1p2 p3
p0(1)
p1(1) p2(1)p0(3) = p(t) 01t 85
WłasnościkrzywychBéziera: ●Dlakażdegonitjest∑n i=0Bn i(t)=1,stądkrzywaijejpunktykontrolne znajdująsięwtejsamejprzestrzeni.Cowięcej,jeślifjestdowolnym przekształceniemafinicznym,toobrazwtymprzekształceniukrzywejp, reprezentowanejprzezpunktyp0,...,pn,jestreprezentowanyprzezpunkty f(p0),...,f(pn).ReprezentacjaBézierakrzywejjestafinicznie niezmiennicza. ●Jeślit∈[0,1],dlai∈{0,...,n}jestBn i(t)⩾0.Razemzpoprzedniąwłasnością oznaczato,żewszystkiepunktyp(t)krzywej,dlat∈[0,1],leżąwotoczce wypukłejzbiorupunktówkontrolnych. 86 ●JestBn 0(0)=1,Bn 1(0)=⋯=Bn n(0)=0orazBn 0(1)=⋯=Bn n−1(1)=0, Bn n(1)=1.Stądwynikainterpolacjaskrajnychpunktówkontrolnych: p(0)=p0,p(1)=pn. ●Łatwomożnaudowodnić,żed dtBn i(t)=n(Bn−1 i−1(t)−Bn−1 i(t))(zostawiamto jakoćwiczenie,uwaga:Bn−1 −1(t)=Bn−1 n(t)=0).Możnastądobliczyć p′ (t)=n ∑ i=0pi(Bn i(t))′ =n(−p0Bn−1 0(t)+n−1 ∑ i=1pi(Bn−1 i−1(t)−Bn−1 i(t))+pnBn−1 n−1(t)) =n−1 ∑ i=0n(pi+1−pi)Bn−1 i(t). Zatempochodnakrzywejstopnianjestkrzywąstopnian−1,którejpunktami sąwektoryn(p1−p0),...,n(pn−pn−1). 87
1p1p01 10p(t)31p102p(t)1p31 0 p(t) 1p0 1p2 0t1 p0 ●Możemyteżzobaczyć,że p′ (t)=n(n ∑ i=0pi+1Bn−1 i(t)−n−1 ∑ i=0piBn−1 i(t))=n(p(n−1) 1−p(n−1) 0). Wektorpochodnejdladanegototrzymamy,mnożącprzeznróżnicępunktów otrzymanychwprzedostatnimkrokualgorytmudeCasteljau. 88
●AlgorytmdeCasteljauumożliwiapodziałkrzywejBéziera.Jeśli0<t<1,to otrzymaneprzeztenalgorytmpunktyp(0) 0,...,p(n) 0orazp(n) 0,...,p(0) n reprezentująłukikrzywejnadprzedziałami[0,t]i[t,1].Możnawprowadzić lokalneparametry,np.siuzmieniającesięwtychprzedziałachod0do1. Abypodzielićkrzywą,możnawykonaćprocedurę voidPodziel(intn,punktp[],punktq[],floatt) { q[0]=p[0]; for(j=1;j<=n;j++){ for(i=0;i<=n-j;i++) p[i]=(1-t)*p[i]+t*p[i+1]; q[j]=p[0]; } }/*Podziel*/ Dotablicyqtrafiająpunktyreprezentującepierwszączęśćłuku,apunktydane wtablicypsązastępowaneprzezpunktykontrolnedrugiegołuku. 89
●Podanąwyżejproceduręmożnazastosowaćdorekurencyjnegopodziału krzywej,wcelujejnarysowaniajakołamanejzłożonejzdostateczniekrótkich odcinków—podobniejakwewcześniejpodanymalgorytmierysowaniaelips. Kryteriumzatrzymaniarekurencjimożebyćtakie:jeśliodległośćpunktów kontrolnychp1,...,pn−1ododcinkap0pnjestmniejszaniżε,to(zwłasności otoczkiwypukłej)wszystkiepunktyłukusąwodległościmniejszejniżεod tegoodcinka.Możnaprzyjąćεbliskiśrednicyjednegopiksela. ●Zżadnąprostą(napłaszczyźnie)anizżadnąpłaszczyzną(wprzestrzeni trójwymiarowej)krzywaniemawięcejpunktówwspólnychniżjejłamana kontrolna.Tojesttzw.własnośćzmniejszaniawariacji. 90 ●WielomianybazoweBernsteinaspełniająteżformułę Bn i(t)=n−i n+1−iBn+1 i(t)+i−1 n+1Bn+1 i+1(t). Podstawiającjądowzorudefiniującegokrzywą,poprzekształceniach otrzymamy p(t)=n ∑ i=0piBn i(t)=n+1 ∑ i=0ˆ piBn+1 i(t). gdzie ˆ pi
=n+1−i n+1pi+i n+1pi−1. Wtensposóbmożnadokonaćpodwyższeniastopniakrzywej,tj.przejściado reprezentacjiwbaziewyższegostopnia. 91
p0 = p0
›
p1 p1›
p3 = p4
›
●Zewzorunapodwyższaniestopniawynika,żejeślipunktyp0,...,pnsą współliniowe,uporządkowanenaprostejirównoodległe,tokrzywaBéziera jestodcinkiemsparametryzowanymzestałąprędkością. 92
●KosztalgorytmudeCasteljaujestrzędun2,aleopróczpunktup(t)dajeon wieleinnychwyników(podziałkrzywej,pochodne).Algorytmokoszcie rzędun,którydostarczatylkopunktkrzywej,opierasięnaschemacieHornera. Niechs=1−t.Wtedy p(t)=p0(n 0)sn +p1(n 1)tsn−1 +⋯+pn−1(n n−1)tn−1 s+pn(n n)tn = (⋯(p0(n 0)s+p1(n 1)t)s+⋯+pn−1(n n−1)tn−1 )s+pn(n n)tn . Możemyużyćwzorów(n 0)=1,(n 1)=noraz(n i+1)=n−1 i+1(n i)idostaćalgorytm s=1-t;p=p0;d=t;b=n; for(i=1;i<=n;i++){ p=s*p+b*d*pi; d*=t;b=(b*(n-1))/(i+1); } 93
K rz yw e B -s kl ej an e
KrzyweBézieramożnałączyć,coułatwiamodelowanieobiektów oskomplikowanychkształtach:zinterpolacjiskrajnychpunktówkontrolnych wynikałatwość„sklejenia”krzywychwsposóbciągły,azfaktu,żekrzywajest stycznawtychpunktachdoskrajnychodcinkówłamanejkontrolnejwynikałatwość uzyskaniakrzywejgładkiej(tj.którejstycznamakierunekzmieniającysięwsposób ciągły).Metodęosiąganiagładkościpołączeniamożnauogólnićnapochodne wyższegorzędu,aletoprzestajebyćwygodne. Bardziejsystematycznysposóbotrzymywaniagładkichkrzywychpoleganaużyciu reprezentacjiB-sklejanej.Krzywatakaskładasięzłukówwielomianowych stopnian;liczbanmożebyćniezbytduża,alełukówmożebyćdowolniewiele. 94 a) b) Jeślikształtmabyćskomplikowany,totrzebadużopunktówkontrolnych.Dla krzywejBézieratowymuszawysokistopień,awtedykształtkrzywejmożemieć niewielewspólnegozkształtemłamanej.LepiejtowyglądadlakrzywejB-sklejanej. 95AbyokreślićkrzywąB-sklejaną,należypodaćstopieńn,niemalejącyciągwęzłów u0,...,uNorazciągpunktówkontrolnychd0,...,dN−n−1.Parametryzacja krzywejjestdanawzorem s(t)=N−n−1 ∑ i=0diNn i(t),t∈[un,uN−n), wktórymwystępująunormowanefunkcjeB-sklejanestopnian,określoneprzez liczbęniciągwęzłów,wzoremMansfielda–deBoora–Coxa: N0 i(t)={1dlat∈[ui,ui+1), 0wprzeciwnymrazie, Nn i(t)=t−ui ui+n−uiNn−1 i(t)+ui+n+1−t ui+n+1−ui+1Nn−1 i+1(t)dlan>0. Wzórtenjestuogólnieniemwzorurekurencyjnegoudowodnionegowcześniejdla wielomianówbazowychBernsteina. 96
Wpodobnysposób,jakdlakrzywychBéziera,napodstawiewzoru Mansfielda–deBoora–CoxawyprowadzasięalgorytmdeBoora,którydladanej krzywejsiliczbyt∈[un,uN−1)obliczapunkts(t): /*znajdźtakiek,żet∈[uk,uk+1)*/ /*oznaczd(0) i=didlai=k−n,...,k*/ for(r=0;r<N&&t==uk−r;r++); for(j=1;j<n-r;j++) for(i=k-n+j;i<=k-r;i++){ α(j) i=(t−ui)/(ui+n+1−j−ui); d(j) i=(1−α(j) i)d(j−1) i−1+α(j) id(j−1) i; } /*s(t)=d(n−r) k−r*/ 97
n=3 (1)s(t)dk dk0n dk dd0N0n01 uuuuuut145678 uu29 uu310 gpierwszaiteracja gdrugaiteracja gtrzeciaiteracja 98 WłasnościkrzywychB-sklejanych: ●JeśliwszystkiewęzłyodundouN−nsąróżne,tokrzywaskładasięN−2n łukówwielomianowych;wprzeciwnymrazie(gdywystępująwęzłykrotne) liczbałukówjestmniejsza. ●AlgorytmdeBooradokonujeinterpolacjikolejnootrzymywanychpunktów, przyczymα(j) i∈[0,1],zatemwszystkieotrzymanepunktyleżąwotoczce wypukłejpunktówdk−n,...,dk.Całyłukdlat∈[uk,uk+1)jestpołożony wotoczcewypukłejtychpunktówkontrolnych—tojestsilnawłasność otoczkiwypukłej. 99
n=2n=3 dd00 uuuuuuuuuuu13457814578dd77 uuuuuu269269 uu310 100
●SumafunkcjiB-sklejanychwprzedziale[uk,uk+1)jeststała,równa1.Mamy stądafinicznąniezmienniczośćreprezentacji:abypoddaćkrzywądowolnemu przekształceniuafinicznemu,wystarczyzastosowaćtoprzekształceniedojej punktówkontrolnych. ●Reprezentacjazapewnialokalnąkontrolękształtu:ponieważpunkts(t)dla t∈[uk,uk+1)zależytylkoodpunktówkontrolnychdk−n,...,dk, przemieszczeniekażdegoinnegopunktuniezmieniałukukrzywejdla t∈[uk,uk+1). Wkonsekwencji,przemieszczeniepunktukontrolnegodizmieniatylkołuk krzywejodpowiadającywartościomparametrut∈[un,uN−n)∩[ui,ui+n+1). 101
n=2 d0 uuuuuuu1345678 uu29 d7 102 ●Krzywaskładasięzłukówwielomianowychstopniaconajwyżejn,azatem pochodnaparametryzacjijestkrzywąsklejanąstopniamniejszegoniżn. Dasięjąprzedstawićwpostaci s′ (t)=N−n−2 ∑ i=0
n ui+n+1−ui+1(di+1−di)Nn−1 i+1(t). CiągwęzłówużytydookreśleniafunkcjiNn−1 ijesttensam,cociągokreślający funkcjeNn i(t). Zastosowaniesilnejwłasnościotoczkiwypukłejdopochodnejdajesilną własnośćhodografukrzywychB-sklejanych:dlat∈(uk,uk+1)wektors′(t) jestkombinacjąliniowąwektorówróżnicdk−n+1−dk−n,...,dk−dk−1 ododatnichwspółczynnikach. 103
1d3 n=31d02s(t)s(t) 1d1 d1 1d1d01d2 t d7uuuuu014578s(t)0uuu269 1duu3310 104