• No results found

Resultat för “Discrete Diffierential-Geometry Operators for Tri-

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

2-Manifolds” algoritm 39

4.2

Resultat för “Discrete Diffierential-Geometry

Operators for Triangulated 2-Manifolds” al-

goritm

Här har jag använt trianguleringsalgoritmen som beskrivs i avsnitt 2.2 på samma del av enhetssfären som för Bézierytor. Jag har tagit samma ‘remsa’ av punkter som innan, för att kunna jämföra metoderna.

Jag har även valt att testa approximationen på hela sfären, men då har jag triangulerat med hjälp av konvexa höljet (convhulln i Matlab). Detta för att få en bättre bild av trianguleringens påverkan på resultatet.

Tabell 4.5:

Triangulering av 49 punkter, 5 approximationer värde f el

Gausskrökning 1,0608 9,72%

Medelkrökning 1,0474 9,43%

Tabell 4.6:

Triangulering av 256 punkter, 13 approximationer värde f el

Gausskrökning 1,0480 6,71%

Medelkrökning 1,0458 6,64%

Figur 4.5: Triangulering av 256 punkter

Tabell 4.7:

Triangulering av 1024 punkter, 29 approximationer värde f el

Gausskrökning 1,0348 12,32%

4.2. Resultat för “Discrete Diffierential-Geometry Operators for Triangulated

2-Manifolds” algoritm 41

Figur 4.6: Triangulering av 1024 punkter

Tabell 4.8:

Triangulering av 16384 punkter, 122 approximationer värde f el

Gausskrökning 1,0658 10,65%

Medelkrökning 1,0658 10,65%

Vi ser att medelvärdet av gausskrökningen blir bättre fram till 16384 punk- ter, där värdet blir sämre. Även medelfelet blir bättre fram till 1024 punkter, där det blir sämre för att sedan förbättras något vid 16384 punkter.

Medelkrökningen beter sig som gausskrökningen, förutom att den approx- imeras något bättre än gausskrökningen för varje fall utom då vi har 16384 punkter. Det går inte heller att approximera krökning på kanterna till ytan, detta då vi inte har ett fullständigt 1-rings område runt punkterna.

Jag har även testat en annan triangulering som fås av det konvexa höljet, men då måste vi använda hela sfären. Anledningen till detta är för att se hur en annan triangulering påverkar resultatet.

Tabell 4.9:

Konvexa höljet av 256 punkter, 11 approximationer värde f el

Gausskrökning 1,0150 5,59%

Medelkrökning 0,9847 4,93%

4.2. Resultat för “Discrete Diffierential-Geometry Operators for Triangulated

2-Manifolds” algoritm 43

Tabell 4.10:

Konvexa höljet av 1024 punkter, 27 approximationer värde f el

Gausskrökning 1,0039 3,35%

Medelkrökning 0,9997 3,32%

Figur 4.8: Konvexa höljet av sfären med 1024 punkter

Tabell 4.11:

Konvexa höljet av 16384 punkter, 122 approximationer värde f el

Gausskrökning 1,0150 4,75%

Medelkrökning 1,0148 4,75%

Även med denna triangulering så approximeras gausskrökningen bra även om den blir lite sämre med 16384 gentemot 1024 punkter och medelkrökningen beter sig likadant fast den är något bättre än gausskrökningen (förutom med 256 punkter). Däremot verkar den här trianguleringen fungera bättre med artikelns algoritm.

Jag avslutar med att ge en tabell över de bästa approximationerna för re- spektive fall och vilken metod som gav den approximationen.

#Punkter Gausskrökning Algoritm

49 1,0608 Artikelns algoritm, triangulering 256 1,015 Artikelns algoritm, konvexa höljet 1024 1,0039 Artikelns algoritm, konvexa höljet

16384 0,9963 Bézieryta

Tabell 4.12: Bästa approximationerna av gausskrökningen

För medelkrökningen får vi följande tabell #Punkter Medelkrökning Algoritm

49 0,9647 Bézieryta

256 0,9849 Bézieryta

1024 0,9997 Artikelns algoritm, konvexa höljet

16384 0,9981 Bézieryta

Tabell 4.13: Bästa approximationerna av medelkrökningen

Vi avslutar med att ge en tabell för tidsåtgången för varje approximering, dvs hur lång tid det tog att approximera krökningarna i alla valda punkterna. Algoritmerna är testade på en dator med AMD A6-3410MX APU (1,6GHz 4 kärnor). Tiden är angiven i sekunder om inget annat skrivs.

Metod #Punkter # Approximationer Tidsåtgång

Bézier 49 7 0,655

Artikeln, triangulering 49 5 0,0259

Bézier 256 16 8,99

Artikeln, triangulering 256 13 0,123

Artikeln, konvexa höljet 256 11 0,0784

Bézier 1024 32 70,7

Artikeln, triangulering 1024 29 0,701

Artikeln, konvexa höljet 1024 27 0,644

Bézier 16384 128 6h 18min

Artikeln, triangulering 16384 122 36,7

Artikeln, konvexa höljet 16384 122 58,0 Tabell 4.14: Tidsåtgång för algoritmerna

Kapitel 5

Slutsatser och diskussion

Bézierytans approximation av krökningarna var bra, även om den inte var rik- tigt lika bra som artikelns approximation av gausskrökningen för de färre punk- terna. Däremot ser vi att medel- och gausskrökningarna konvergerar mot det analytiska värdet och att spridningen på värdena minskar om antalet punkter höjs.

En av det större nackdelarna var att beräkningarna för att få fram approx- imationerna tog väldigt lång tid då vi hade 16384 punkter (de 122 approxi- mationerna tog ett par timmar att beräkna). Troligtvis går det att optimera koden så det går snabbare, bland annat genom att programmera i C eller C++ istället för Matlab. Anledningen till att jag valde Matlab var för dess inbyggda matematiska funktioner och för den smidiga visualiseringen.

En annan nackdel är att Bézierytan blev linjär vid nordpolen vilket gjorde att vi inte kunde approximera krökningarna där, men jämför vi med artikelns algoritm som inte kan approximera på några kanter alls är Bézierytan bättre.

Med artikelns algoritm approximerades gausskrökningen bra, den var i de flesta fallen bättre än Bézierytornas approximationer (om vi tar med båda sät- ten att triangulera). Artikelns approximation hade dock större spridningar än Bézierytans approximation, vilket gör valet av punkter viktigare.

Även medelkrökningen approximerades bra med artikelns algoritm, den var något bättre än gausskrökningen i de flesta fallen. Däremot var Bézierytans approximation bättre i nästan alla fallen och spridningen på Bézierytans medel- krökningen var mindre, vilket gör den till ett bättre val för medelkrökningen. Som för gausskrökningen så är valet av punkter viktigare vid approximation av medelkrökningen med artikelns algoritm, vilket gör Bézierytan till den bättre metoden.

Jag lyckades inte få samma resultat som artikeln fick med sin algoritm. Detta beror på att de flesta trianglarna i min triangulering är trubbiga och då blir man tvungen att använda sig av deras andra finita volymsområde, vilket de skriver ska ge sämre approximationer.

Jag lyckades inte heller få gausskrökningen att konvergera, dock verkade den göra det fram till sista fallet med 16384 punkter. Även detta beror på att trian- guleringen gav många trubbiga vinklar vilket ledde till att vi inte kunde använda voronoi-områden runt punkterna. Eftersom artikelns bevis för konvergens gäller just för voronoi-områden så kunde vi inte heller förvänta oss det.

En annan nackdel med artikelns algoritm är att det inte går att approximera

någon krökning längs med konturerna till ytan, vilket beror på att vi inte har något fullständigt 1-rings område runt de punkterna (dessa värden blir väldigt stora).

Av de två trianguleringsmetoderna var den som fås genom kovexa höljet bättre, den gav bättre medelvärde på gausskrökningen och mindre spridning mellan värdena. Detta pekar ytterligare på att algoritmen är starkt beroende på val av triangulering.

För att kunna rättfärdiga artikelns resultat så behövs ytterligare approxi- mationer göras, då på en triangulerad yta med mindre antal trubbiga trianglar (helst inga). Det skulle även vara intressant att testa båda metoderna på ytor som har någon form av brus för att se hur approximationerna beter sig då. Även approximationer på andra ytor än just sfären skulle vara av intresse.

En annan fortsättning skulle kunna vara att approximera diskret krökning av rotationsytor. En rotationsyta är en kurva som roteras runt en axel (eller en annan rät linje). Fördelen med rotationsytor är att det blir enklare att få fram trianguleringar och att beräkna krökningar.

Av mina resultat så verkar Bézierytan vara den stabilare metoden för ap- proximation av gauss- och medelkrökningen (speciellt medelkrökningen), den är även lättare att implementera. Däremot så kräver den fler operationer och blir tidsmässigt mer kostsam.

Litteraturförteckning

[1] Mark de Berg, Otfried Cheong, Mark van Kreveld, and Mark Overmars.

Computational Geometry: Algorithms and Applications. Springer Verlag,

third edition, March 2008.

[2] Mathieu Desbrun, Mark Meyer, Peter Schröder, and Alan H. Barr. Discrete Differential-Geometry Operators for Triangulated 2-Manifolds. Visualization

and Mathematics III, pages 35–58, Springer-Verlag, 2003.

[3] Elias Erdtman. Visualisering av krökning, Linköpings universitet LiTH- MAT-EX–2010/14–SE, juni 2010.

[4] A. Hilton, J. Illingworth, A.J. Stoddart, and T. Windeatt. Curvature and torsion feature extraction from freeform 3-d meshes at multiple scales. IEEE

Proc-Vis. Image Signal Process, Vol. 147 pp. 454–462, 2000.

[5] Duncan Marsh. Applied Geometry for Computer Graphics and CAD. SUMS. Springer-Verlag, second edition, 2005.

[6] Arne Persson och Lars-Christer Böiers. Analys i Flera Variabler. Student- litteratur, andra upplagan, 2005.

[7] Andrew Pressley. Elementary Differential Geometry. SUMS. Springer Ver- lag, third edition, 2002.

[8] B. Thibert and J.M. Morvan. On the approximation of a smooth surface with a triangulated mesh. Computational Geometry Theory And Application, Vol. 23 pp. 337–352, 2002.

Bilaga A

Matlabkoder

A.1

beziercurvature

1 function [gaussian, meancurvature] = beziercurvature( cp, st )

2 %CURVATURE Summary of this function goes here

3 % cp is a MxNx3 matrix with the controlnet. st is a 2x1 matrix ...

and it

4 % will be the point at which we will calculate the curvature.

5 iter = size(st,2);

6 % Plotting point 7 % hold on;

8 % currp = Beziersurface(cp, st);

9 % plot3(currp(1), currp(2), currp(3), '.w', 'Markersize',15);

10 11 for i =1:iter 12 13 sprim = diffbezier(cp,1,0,st(:,i)); 14 ssbiss = diffbezier(cp,2,0,st(:,i)); 15 tprim = diffbezier(cp,0,1,st(:,i)); 16 ttbiss = diffbezier(cp,0,2,st(:,i)); 17 stprim = diffbezier(cp,1,1,st(:,i)); 18 19 E = dot(sprim, sprim); 20 F = dot(sprim, tprim); 21 G = dot(tprim, tprim); 22 23 n = cross(tprim, sprim); 24 unitN = n./(norm(n)); 25 26 L = dot(ssbiss,unitN); 27 M = dot(stprim, unitN); 28 N = dot(ttbiss, unitN); 29 30 F1 = [E F; F G]; 31 F2 = [L M; M N]; 32 end 33 meancurvature = (L*G−2*M*F+N*E)/(2*E*G−2*F^2); 34 gaussian = (L*N−M^2)/(E*G−F^2); 35 end Karlsson, 2012. 49

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

Related documents