• Nie Znaleziono Wyników

Skł ad an ie p rz eks zt ał ce ń afi n ic zn yc h

N/A
N/A
Protected

Academic year: 2021

Share "Skł ad an ie p rz eks zt ał ce ń afi n ic zn yc h"

Copied!
80
0
0

Pełen tekst

(1)

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) ov1

v2p

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

(2)

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 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. Zaczymspodichkwypaszaramyszkacynowa, którapuszczającpyszczkiembańkimydlane,zarazem biegapostole,aspodogonkasypałsjejbiałykredowy pyłtakkunsztownie,iżpowstztegokaligrafowanynapis: AWCNAPRAWDĘNASNIEKOCHACIE? StanisławLem:Cyberiada Drugisposóbjeststosowanywtzw.graficeżółwia.Żółwchodzipopłaszczyźnie, wykonującpoleceniawrodzaju„Obróćsięoxstopniwlewo”lub„Wykonajkrok odługościywprzód”. 7

P rz eks zt 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=p1p2,toobrazemvjest f(p1)−f(p2)=Lp1+t−(Lp2+t)=L(p1p2)=Lv. 8

(3)

Wektornormalnypowierzchniniejestwektoremswobodnym.Sposóbjego przekształcaniawynikazrównaniapłaszczyzny:π={p∶nT(pp0)=0}. Równanieobrazupłaszczyznyπwprzekształceniufto 0=mT (f(p)−f(p0))=mT L(pp0). Równaniebędziespełnione,jeśliprzyjmiemym=LTn,bowtedy nT L−1 L(pp0)=nT (pp0)=0. Zauważmy,żeLT=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. 11

Najczęściejspotykanewrysunkutechnicznymrodzajeaksonometrii: kawalerskawojskowaizometryczna 12

(4)

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

(5)

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

(6)

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łidDlarzwtowaniauwoległ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

(7)

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. 27

R 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. 28

(8)

Najczęś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. 31

Zał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

(9)

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

(10)

A lg or yt m z p ły w aj ąc ym h or yz on te m

Wykresfunkcjidwóchzmiennychwrzucieaksonometrycznymz„widocznością”: ξ ηw

h

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

(11)

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: xi=0(2i+1)=(x+1)2 , ri=y(2i−1)=r2 −(y−1)2 . Funkcja f(x,y)=xi=0(2i+1)−ri=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. 43

Bę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

(12)

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−1i=0(2i+1)−ri=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

(13)

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 n ia n ie w ie lo w

Dobrzezaprojektowanaprocedurarasteryzacjipowinnazapewniaćjednoznaczność „zaklasyfikowania”pikselidowielokątówowspólnychbokach.Doobrazuwielokąta należątepiksele,którychśrodkisąwewnątrz.Cozpikselaminabrzegu? 51

Przykł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

(14)

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

(15)

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. 60

(16)

Pierwszymkrokiemjestznalezieniekodó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

(17)

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 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. 68

(18)

voidSHClip(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

(19)

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

(20)

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,op0⟩.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

(21)

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 81

ParametryzacjakrzywejBézierajestdanawzorem p(t)=ni=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)=ni=0piBn i(t)=p0Bn 0(t)+n−1i=1piBn i(t)+pnBn n(t) =(1−t)p0Bn−1 0(t)+n−1i=1pi((1−t)Bn−1 i(t)+tBn−1 i−1(t))+tpnBn−1 n−1(t) =(1−t)n−1i=0piBn−1 i(t)+tn−1i=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

(22)

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)=ni=0pi(Bn i(t)) =n(−p0Bn−1 0(t)+n−1i=1pi(Bn−1 i−1(t)−Bn−1 i(t))+pnBn−1 n−1(t)) =n−1i=0n(pi+1pi)Bn−1 i(t). Zatempochodnakrzywejstopnianjestkrzywąstopnian−1,którejpunktami sąwektoryn(p1p0),...,n(pnpn−1). 87

1p1p01 10p(t)31p102p(t)1p31 0 p(t) 1p0 1p2 0t1 p0 ●Możemyteżzobaczyć,że p (t)=n(ni=0pi+1Bn−1 i(t)−n−1i=0piBn−1 i(t))=n(p(n−1) 1p(n−1) 0). Wektorpochodnejdladanegototrzymamy,mnożącprzeznróżnicępunktów otrzymanychwprzedostatnimkrokualgorytmudeCasteljau. 88

(23)

●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)=ni=0piBn i(t)=n+1i=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

(24)

●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. 95

AbyokreślićkrzywąB-sklejaną,należypodaćstopieńn,niemalejącyciągwęzłów u0,...,uNorazciągpunktówkontrolnychd0,...,dNn−1.Parametryzacja krzywejjestdanawzorem s(t)=Nn−1i=0diNn i(t),t∈[un,uNn), 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

(25)

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(nr) 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łyodundouNnsą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

(26)

●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,uNn)∩[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)=Nn−2i=0

n ui+n+1−ui+1(di+1di)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+1dk−n,...,dkdk−1 ododatnichwspółczynnikach. 103

1d3 n=31d02s(t)s(t) 1d1 d1 1d1d01d2 t d7uuuuu014578s(t)0uuu269 1duu3310 104

Cytaty

Powiązane dokumenty

powierzchni użytkowania podstawowego całego obszaru objętego ustaleniem. spełnienie warunków obowiązujących dla stref polityki przestrzennej określonych w rozdziale III w

[r]

Obecność kobaltu nieodzow na przy wiązaniu azotu przez

O suw iska są więc przyśpieszonym czynnikiem rzeźbotw órczym

20%; (b) spełnienie warunku zgodności przesunięć poszycia i środników ciągłych usztywnień wzdłużnych na granicach segmentów może być uzyskane zarówno za pomocą

Ensuring the proper functioning of this type of infrastructure would contribute to the smooth flow of information and providing safety for the management systems used for

W miejscu nieistniejącej synagogi gminy żydowskiej w Stargardzie, znajdującej się przy dzi- siejszej ulicy Spichrzowej (d. Speicherstraße 14/15) umiejscowiona zostanie

planuje się przedstawienie praktycznej wiedzy związanej ze specyfiką eksploatacji złoża LGOM na przykładzie wybranych rejonów kopalni, w ramach: (i) podziemnej wizyty w