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