• No results found

Gauss-Bonnets sats

In document Diskret krökning, en jämförelse (Page 31-44)

2.2 Krökningar

2.2.6 Gauss-Bonnets sats

Gauss-Bonnets sats är ett av de viktigaste resultaten inom teorin om ytor. En version av satsen ger ett samband mellan ytans geometriska egenskaper och dess topologiska.

Denna sats finns i flertalet olika formuleringar, men jag kommer dock bara ta upp en av dessa. Detta beror på att approximeringen av gausskrökningen i [2] bygger på denna formuleringen av satsen, vilket tas upp i avsnitt 2.3. Vi måste först definiera vad en kroklinjig månghörning är.

Definition 10. En kroklinjig månghörning i R2 är en kontinuerlig avbildning

π : R → R2 så att det för något reellt tal a och punkter 0 = t

0 < t1 < . . . < tn = a gäller 1. π(t) = π(t0) ⇔ t0− t= na, n ∈ N; 2. π är snäll på de öppna intervallen(t0, t1), (t1, t2) . . . (tn−1, tn); 3. de ensidiga derivatorna ˙π(t i) = lim t↑ti π(t) − π(ti) t − ti , ˙π+(ti) = lim t↓ti π(t) − π(ti) t − ti

Vidare låter vi βi vara vinkeln mellan ˙πi och ˙π +

i vid punkten π(ti) [7]. En kroklinjig månghörning på en karta σ : U → R3 definieras av:

Definition 11. Låt π: R → U vara en kroklinjig månghörning i R2, dvs den

uppfyller föregående definition. Då får vi en kroklinjig månghörning på kartan σ genom följande avbildning: γ= σ ◦ π.

Punkterna γ(ti) är hörnen i månghörningen och de öppna intervallen (ti−1, ti) är kanterna.

Gauss-Bonnets sats för kroklinjiga månghörningar säger följande:

Sats 3. Låt γ vara en positivt orienterad kroklinjig månghörning med fart 1 och

n st kanter på en yta σ. Låt vidare α1, α2, . . . , αn vara de inre vinklarna och βi

de yttre vinklarna vid hörnen, l(γ) vara längden av γ och int(γ) vara området som omsluts av γ. Låt området int(γ) vara 1-sammanhängande. Då gäller:

Z l(γ) 0 κgds= n X i=1 αi(n − 2)π − Z Z int(γ) KdAσ,

där κg är den geodetiska krökningen och K är gausskrökningen [7].

Att ett område är 1-sammanhängande innebär att varje sluten kurva kan krympas kontinuerligt till en punkt.

Vi kan skriva om formeln i satsen och få den att bero på de yttre vinklarna

βigenom att använda följande samband:

βi+ αi= π ⇔ αi= π − βi, vilket kan ses i följande figur:

2.2. Krökningar 17

Vi får då Gauss-Bonnets sats till följande: Z l(γ) 0 κgds= n X i=1 αi(n − 2)π − Z Z int(γ) KdAσ⇔ Z l(γ) 0 κgds= n X i=1 (π − βi) − (n − 2)π − Z Z int(γ) KdAσ ⇔ Z l(γ) 0 κgds= 2π − n X i=1 βi− Z Z int(γ) KdAσ

Bevis och ytterligare varianter på satsen finns i [7].

Exempel 2.2.6. Antag att vi har en geodetisk triangel som ligger på enhetssfä-

ren, med vinklarna π/2, π/2 och α. Eftersom triangelns kanter är ‘raka’ om vi står på sfären så innebär det att kanterna är geodeser, de har alltså geodetisk krökning 0. Med kunskapen om att krökningen på sfären är 1 får vi med Gauss- Bonnets sats (eftersom triangeln är en kroklinjig månghörning med 3 kanter)

0 =Z l(γ) 0 κgds= n X i=1 αi(3 − 2)π − Z Z int(γ) 1dA ⇔ Z Z int(γ)

Kapitel 3

Algoritmer

3.1

Bézierytor

Bézierytor och Bézierkurvor används mycket inom datorgrafik och inom design (med hjälp av datorer). Det är mycket populärt tack vare att det är enkelt att använda, även om man inte har så stor matematisk kunskap, och dessa ytor/kur- vor har trevliga egenskaper som gör de lätta att arbeta med. Dock krävs det en dator för att göra beräkningar på kurvor/ytor av högre ordningen effektivt, även om det inte är svåra beräkningar. Då Bézierytor är ett sätt att bygga ytor från en samling punkter så lämpar sig dem väl för tillämpningsområden.

Bézierkurvor och ytor härstammar från bilindustrin runt 60-talet. Det var två fransmän, Pierre Bézier och Paul de Casteljau som kom på och utvecklade metoden (de jobbade på Renault resp. Citröen).

Jag börjar med att ta upp uppbyggnad och egenskaper av Bézierkurvor för att sedan gå över till Bézierytor. Anledningen till detta är att en Bézieryta är uppbyggd av “produkten” av två Bézierkurvor [5].

Bézierkurvor är polynomkurvor där formen av kurvan bestäms av en mängd kontrollpunkter, och graden av kurvan är n, där n +1 = # kontrollpunkter.

3.1.1

Bézierkurvor

En Bézierkurva definieras av:

Definition 12. Givet de n+1 kontrollpunkterna b0, b1, . . . , bn så ges Bézier-

kurvan av grad n av:

B(t) = n X

i=0

biBi,n(t), 0 ≤ t ≤ 1.

Där varje punkt bi∈ Rk, och Bernsteinpolynomen Bi,n(t) ges av

Bi,n(t) = ( n!

(n−i)!i!(1 − t)

n−iti, om0 ≤ i ≤ n

0, annars [5].

Denna form av Bézierkurvor kallas för heltals Bézierkurvor, det finns även en definition på rationella Bézierkurvor, men då jag använt mig av heltals Bé-

zierkurvor så kommer jag inte ta upp något om rationella kurvor. För den som vill läsa mer om dessa så hänvisar jag till [5].

Punkterna bi ger upphov till en (Bézier) kontroll-figur, givet att man tar punkterna och drar linjer mellan dessa i den ordning de ges (dvs från 0 → n).

Vi visar ett exempel på hur man tar fram en Bézierkurva, givet ett visst antal kontrollpunkter:

Exempel 3.1.1. Givet kontrollpunkterna b0 = (0, 0), b1 = (1, 1) och b2 = (2, 0) så ska vi beräkna Bézierkurvan för dessa.

Först noterar vi att b0 inte tillför något, ty punkten är origo och därmed

behöver vi inte beräkna B0,2(t) (notera att vi har 3 kontrollpunkter och därmed

n = 2, alt kolla indexet på sista punkten). Så vi räknar ut Bernsteinpolynomen för i = 1 och 2: B1,2(t) = 2! (2 − 1)!1!(1 − t) 2−1t1 ⇔ B1,2(t) = 2t − 2t2. B2,2(t) = 2! (2 − 2)!2!(1 − t)2−2t2⇔ B2,2(t) = t2.

Nu kan vi räkna ut Bézierkurvan:

B(t) = b0B0,2(t) + b1B1,2(t) + b2B2,2(t) = (0, 0) + (1, 1)(2t − 2t2) + (2, 0)t2 ⇐⇒

B(t) = (2t, 2t − 2t2).

Vi ser i följande figur hur grafen för B(t) ser ut:

3.1. Bézierytor 21

Bernsteinpolynomen i en Bézierkurva har viktiga egenskaper som påverkar Bézierkurvans egenskaper: 1. Summan av Bernsteinpolynomen: n X i=0 Bi,n(t) = 1, t ∈ [0, 1] 2. Positivitet: Bi,n(t) ≥ 0, ∀t ∈ [0, 1] 3. Symmetri: Bn−i,n(t) = Bi,n(1 − t), för i = 0, 1, . . . , n 4. Rekursivitet:

Bi,n(t) = (1 − t)Bi,n−1+ tBi−1,n−1(t), för i = 0, 1, . . . , n där B−1,n−1(t) = 0 och Bn,n−1(t) = 0.

De två första egenskaperna ger upphov till Bézierkurvans invarians vid affina avbildningar och egenskapen av det konvexa höljet. Symmetrin innebär att en symmetrisk kontroll-figur kommer ge upphov till en symmetrisk Bézierkurva och den sista egenskapen ger Casteljau’s algoritm. Casteljau’s algoritm är bra för att dela upp kurvan i nya Bézierkurvor av högre grad, dvs att det går att dela upp en befintlig kurva i t ex två delar och dessa delar representeras av två egna Bézierkurvor.

Vi klargör dessa egenskaper och sammanfattar i en sats:

Sats 4. En Bézierkurva B(t) av grad n med kontrollpunkterna b0, . . . , bn upp-

fyller följande egenskaper:

1. Ändpunkts-interpolation: B(0) = b0 och B(1) = bn

2. Egenskapen hos ändpunkts-tangenterna:

B0(0) = n(b1− b0) och B0(1) = n(bn− bn−1)

3. Egenskapen hos konvexa höljet: varje punkt på B(t) ligger inuti det konvexa höljet givet av kontrollpunkterna.

4. Invarians under affina avbildningar: Låt T vara en affin avbildning (rotation, spegling, translation eller skalning), då gäller:

T  n X i=0 biBi,n(t)  = n X i=0 T(bi)Bi,n(t) [5]

För bevis av dessa egenskaper så hänvisar jag till [5].

Exempel 3.1.2. Givet är Bézierkurvan

B(t) = (2t, 2t − 2t2)

Med kontrollpunkterna b0= (0, 0), b1= (1, 1) och b2= (2, 0).

1. B(0) = (0, 0) = b0, B(1) = (2, 0) = b2. Så egenskapen om ändpunkts-

interpolation håller.

2. B0(t) = (2, 2−4t) ⇒ B0(0) = (2, 2) = 2(b1−b0), B0(1) = (2, −2) = 2(b2− b1)

3. det konvexa höljet av kontrollpunkterna kan vi se i grafen, och vi ser även att Bézierkurvan håller sig innanför den.

4. Låt T = 2 0 0 2  . Då blir T(B(t)) =(2t, 2t−2t2) 2 0 0 2  = (4t, 4t−4t2). ⇐⇒ (1, 1)2 00 2(2t − 2t2) + (2, 0) 2 0 0 2  t2= (4t, 4t − 4t2). Alltså uppfyller vårat förra exempel alla dessa egenskaper, vilket inte är någon överraskning.

För att beräkna tangenter, normaler och krökningar så är det nödvändigt att kunna beräkna derivatan av en Bézierkurva (som vi sedan kommer tillämpa på Bézierytor). Tack vare egenskapen om rekursivitet så går det att få en enkel och bra formel för derivatan för Bézierkurvor. Vi fokuserar på godtyckligt antal deriveringar, då vi behöver kunna derivera två gånger för att beräkna krökningar av ytor och för att det är snyggare att ha en formel för det allmänna fallet. Sats 5. Den r:te derivatan av en Bézierkurva av grad n ges av:

B(r)(t) = n−r X i=0 b(r)i Bi,n−r(t) där b(r)i = n(n − 1) · . . . · (n − r + 1) r X j=0 (−1)r−jr j  bi+j [5]

Beviset för denna satsen bygger på derivatan av Bernsteinpolynomen. Bevis för en derivata återfinns i [5] tillsammans med en sats om Bernsteinpolynomens derivator.

Vi illustrerar satsen genom att ta våran Bézierkurva från föregående exem- pel.

Exempel 3.1.3. Vi önskar att derivera den Bézierkurvan som ges av följande

kontrollpunkter:

b0= (0, 0), b1= (1, 1) och b2= (2, 0).

3.1. Bézierytor 23 B(1)(t) = 1 X i=0 b(1)i Bi,1(t) Vi beräknar först b(1)i , i= 0, 1 : b(1)0 = 2 · ((1, 1) − (0, 0)) = (2, 2). b(1)1 = 2 · ((2, 0) − (1, 1)) = (2, −2)

Bernsteinpolynomen blir B0,1(t) = (1 − t), B1,1(t) = t, och vi får då derivatan: B0(t) = (2, 2) · (1 − t) + (2, −2) · t = (2, 2 − 4t)

Vi vet sedan tidigare hur Bézierkurvan ser ut på sin parameterform, B(t) =

(2t, 2t − 2t2) och vi kan därmed se att vi fått fram rätt derivata.

Som läsaren troligen märkt så krävs det rätt mycket beräkningar för att få fram en derivering av en sådan enkel kurva. Däremot är det relativt enkelt att programmera in dessa standardformler och då är det inget bekymmer att ta fram detta. Vi har nu den kunskap som behövs för att kunna hantera Bézierytor och beräkna tangenter, normaler och krökningar av dessa ytor.

Jag vill även uppmärksamma att det finns rationella Bézierkurvor som läm- par sig bättre för t ex ellipser och dessa har en lite annorlunda uppbyggnad gentemot heltals Bézierkurvor. För den som vill läsa mer om dessa så hänvisar jag till [5].

Eftersom detta arbete fokuserar på att jämföra beräkning av krökningen på sfären mellan Bézierytor och en diskret formel, så behövde jag inte använda mig av rationella Bézierkurvor/ytor.

3.1.2

Bézierytor

Definition 13. En Bézieryta med kontrollpunkterna bi,j(0 ≤ i ≤ n, 0 ≤ j ≤ p)

ges av: S(s, t) = n X i=0 p X j=0 bi,jBi,n(s)Bj,p(t), (s, t) ∈ [0, 1] × [0, 1]

där Bi,n(s) och Bj,p(t) är Bernsteinpolynomen av grad n och grad p [5]. Alltså består en Bézieryta av den kartesiska produkten av två Bézierkurvor, vilket kommer medföra att vi har trevliga egenskaper för ytan. Vi kan även få fram parameterkurvor som utgör kanterna på ytan genom att fixera ena variabeln: S(0, t), S(1, t), S(s, 0), och S(s, 1).

Följande egenskaper gäller för en Bézieryta:

Sats 6. 1. Ändpunkts-Interpolation: S(0, 0) = b0,0, S(1, 0) = bn,0, S(0, 1) = b0,p, S(1, 1) = bn,p.

2. Konvexa höljet: Bézierytan S(s,t) ligger inuti det konvexa höljet som är givet av sina kontrollpunkter.

3. Invarians under affina avbildningar Låt T vara en affin avbildning i 3 dimensioner, då gäller: T  n X i=0 p X j=0 bi,jBi,n(s)Bj,p(t)  = n X i=0 p X j=0 T(bi,j)Bi,n(s)Bj,p(t) [5]. Att derivera en Bézieryta blir lite krångligare än för bara en kurva, i alla fall om man ska använda den allmänna formeln. För fallet med en partiell derivata så kan man se den inre summan som en enskild Bézierkurva och då gäller samma formel som för Bézierkurvor.

Den allmänna formeln må vara jobbigare, men det är skönare att kunna ha den ifall man skulle vilja ha högre ordningens derivator.

Sats 7. S(α,β)(s, t) = n−α X i=0 p−β X j=0 b(α,β)i,j Bi,n−α(s)Bj,p−β(t) där b(α,β)i,j = n! (n − α)! p! (p − β)! α X k=0 β X l=0 (−1)k(−1)lα k β l  bi+α−k,j+β−l [5]. Här är α ordningen av derivatan med avseende på variabeln s och β är ord- ningen av derivatan med avseende på variabeln t. Att derivera en Bézieryta för hand är jobbigt, men man bör som sagt implementera formlerna i ett pro- gram som gör det åt en. För den som vill veta mer om Bézierytor, och liknande ytor/kurvor, så står det mer i [5].

Vi avslutar kapitlet om ytor med ett exempel på hur man konstruerar en Bézieryta och beräknar partiella derivator.

Exempel 3.1.4. Vi ska beräkna Bézierytan som ges av kontrollpunkterna b0,0= (1, 0, 0), b1,0= (0, 1, 1), b0,1= (1, 1, −1) och b1,1= (0, 0, 0).

och beräkna S1,1(s, t).

Bernsteinpolynomen vi behöver är:

B0,1(s) = 1 − s, B1,1(s) = s.

Vi sätter in värdena i algoritmen:

S(s, t) = b0,0B0,1(s)B0,1(t) + b0,1B0,1(s)B1,1(t) + b1,0B1,1(s)B0,1(t) + b1,1B1,1(s)B1,1(t) = (1, 0, 0)(1 − s)(1 − t) + (1, 1, −1)(1 − s)t + (0, 1, 1)s(1 − t) + (0, 0, 0)st

= (1 − s, t − 2ts + s, s − t)

Nu återstår det att räkna ut derivatan

S00st(s, t) = 1−1 X i=0 1−1 X j=0 b1,1i,jBi,1−1(s)Bj,1−1(t) = b(1,1) 0,0 B0,0(s)B0,0(t) = (0, −2, 0),

3.2. Triangulering av ytor i R3 25

eftersom b(1,1)0,0 = P1k=0P1 l=0(−1)

k+lb

1−k,1−l= b1,1− b0,1− b1,0+ b0,0.

En figur som visar hur Bézierytan ser ut:

Figur 3.2: Grafen av B(t).

3.2

Triangulering av ytor i R

3

Att triangulera en yta innebär att man ska skapa trianglar som i sin tur kom- mer ge en bild av ytan. Detta görs genom att dra kanterna till de närliggande punkterna på ett sådant sätt att hela ytan täcks av trianglar. Att göra detta för hand är inget större problem, men med en dator så blir det ganska svårt att sätta upp krav som genererar en bra triangulering. Ännu jobbigare blir det om vi har en stor mängd punkter, ty då kan en dåligt vald algoritm ta väldigt lång tid för att generera en triangulering.

Om ytan är i 3 dimensioner uppstår det ännu fler problem och flera krav finns för att få en triangulerad yta. Det finns olika algoritmer för detta och man måste veta ifall störningar existerar och vad för sorts störningar som kan uppkomma, detta gör att de flesta algoritmerna är ganska långa och svåra att implementera.

I detta avsnitt kommer jag beskriva den algoritm som jag använt mig av för att lyckas triangulera en yta. Vi vet alltså inte hur ytan ser ut och ska lyckas skapa en bra approximation av den då vi enbart har en mängd punkter i R3. Det viktigaste för oss är att lyckas få en triangulering så vi kan tillämpa algoritmen i avsnitt 2.3, dock så har jag även gjort en visualisering av ytan.

Exempel på en annan triangulering finns i [4].

Vi kommer börja med att gå igenom Delaunay triangulering i R2som utgör grunden i min algoritm, för att sedan beskriva algoritmen. Jag avslutar med att

ge fördelar, nackdelar och förklara varför jag använt mig av denna algoritm.

3.2.1

Delaunay triangulering

Delaunay trianguleringen kommer från den ryske matematikern Boris Delone och har en del trevliga egenskaper, speciellt finns det en egenskap som avgör om en triangel är en godkänd triangel i en Delaunay triangulering. Dock börjar vi med följande sats som är nödvändig för att få en bra triangulering:

Sats 8. Delaunay trianguleringen av en mängd punkter i R2är alltid en planär

graf. [1]

En planär graf är en graf där inga kanter skär varandra, bevis finns i [1]. Nästa sats kommer i sin tur att ge upphov till det nödvändiga och tillräckliga kravet för en Delaunay triangulering.

Sats 9. Låt P vara en mängd punkter i planet, då gäller:

1. Tre punkter pi, pj och pk∈ P är hörnen i en triangel om cirkeln som går

genom punkterna inte omsluter några andra punkter i P.

2. Två punkter pi, pk∈ P bildar en kant till Delaunay grafen om det existerar

en sluten cirkel som går genom punkterna, så att cirkeln inte omsluter några andra punkter i P.[1]

Detta leder i sin tur till följande nödvändiga och tillräckliga krav när en triangulering är en Delaunay triangulering.

Sats 10. Låt P vara en mängd punkter i planet och låt T vara en triangulering

av P i planet. Då är T en Delaunay triangulering om och endast om det för varje triangel gäller att dess omskrivna cirkel inte omsluter någon punkt p ∈ P.

[1]

Det finns en annan egenskap som gör Delaunay trianguleringen ett bra alter- nativ, den maximerar alla minimumvinklar i trianglarna. Alltså undviker man att få långa smala trianglar. Vill läsaren få mer bevis och algoritmer så finns det i [1].

Det finns en motsvarighet till en mängd punkter i 3 dimensioner, men då får man istället använda sig av tetraedrer och slutresultatet blir då en kropp. Detta är inte vad vi är ute efter och därmed kan vi inte använda den algoritmen.

3.2.2

Triangulerings-algoritmen

I artikelns algoritm ([2]) så kräver de ingen speciell triangulering, utan det räcker med en godtycklig triangulering. Vidare så vet vi på förhand vad för sorts ytor vi kommer jämföra Bézierytornas resp. artikelns algoritm ([2]) för approximering av krökningen, eftersom vi vill kunna jämföra med den analytiskt framtagna krökningen. Vi kommer inte heller ha något speciellt brus/störning på punk- terna, förutom möjligen icke unika punkter (dvs samma punkt kan förekomma mer än en gång i punktmängden).

Detta ger oss ett scenario där vi har kontroll på ytan och punktmängden, vi kan därmed skapa en relativt enkel algoritm för trianguleringen.

3.2. Triangulering av ytor i R3 27

Grundidén är att på något sätt göra om punktmängden P ⊂ R3 till en punktmängd i R2 istället. Detta för att vi vill kunna använda Delaunay trian- guleringen, då den algoritmen är relativt enkel att implementera och speciellt då den algoritmen redan finns i Matlab. Givet en punktmängd P i R3 så ser algoritmen ut som följande:

Algoritm. triangulering(P)

In: P= N×3 matris där varje rad motsvarar en punkt i R3

Ut: T , där T är ett objekt innehållande en matris med alla trianglar och en matris med alla punkter (i planet). En graf som visualiserar den trianguliserade ytan.

1. Projicera ner alla punkter i xy-planet.

2. Kör DelaunayTri på de projicerade punkterna. 3. Gör en graf på:

(a) Alla punkterna i P

(b) Alla trianglar mellan punkterna i P

Som läsaren ser så är algoritmen väldigt enkel, detta eftersom DelaunayTri i Matlab gör huvudjobbet i algoritmen. Den som vill se min kod i Matlab hänvisas till appendix.

3.2.3

Kommentarer

Anledningen till varför jag använt denna algoritm är för att den var enkel att implementera och den skapar en triangulering av ytan snabbt. DelaunayTri i Matlab är egentligen en del av programmet qhull, som är specificierat till att beräkna konvexa höljen, voronoi diagram, Delaunay triangulering etc. Detta gör att jag troligtvis inte kan göra en egen kod (speciellt inte i Matlab) som är snabbare eller lika stabil som qhull.

Ett annat problem som dyker upp med denna algoritm är att vi måste krä- va av punktmängden (och ytan) att inga punkter har samma x,y koordinater medans de har olika z koordinater. Ty annars projiceras punkterna ner på sam- ma punkt i xy-planet och skapar stora problem med trianguleringen. Detta medför att vi inte kommer kunna använda algoritmen på slutna ytor, utan vi måste alltid ta en karta av ytan som lämpar sig för detta.

Dock har vi inga problem med att använda trianguleringen för att få ut en relativt bra triangulering av våran karta i exempel 1.1.3, som är den delen av enhetssfären vi approximerat krökningen på.

In document Diskret krökning, en jämförelse (Page 31-44)

Related documents